Java, her zaman mevcut bir yöntemin en özel uygulanabilir sürümünü kullanmaya çalışır (bkz. JLS §15.12.2 ).
Object
, char[]
Ve Integer
tüm alabilir null
geçerli bir değer olarak. Bu nedenle 3 sürümün tümü uygulanabilir, bu nedenle Java'nın en spesifik olanı bulması gerekecektir.
Yana Object
süper türüdür char[]
, dizi versiyonu daha spesifiktir Object
-version. Dolayısıyla, yalnızca bu iki yöntem varsa, char[]
sürüm seçilecektir.
Hem char[]
ve hem de Integer
sürümler mevcut olduğunda, ikisi de daha spesifiktir Object
ancak hiçbiri diğerinden daha spesifik değildir, bu nedenle Java hangisini arayacağına karar veremez. Bu durumda, bağımsız değişkeni uygun türe çevirerek hangisini aramak istediğinizi açıkça belirtmeniz gerekir.
Pratikte bu sorunun düşündüğünden çok daha nadiren ortaya çıktığını unutmayın. Bunun nedeni, yalnızca null
oldukça spesifik olmayan bir tipte (örneğin Object
) bir değişkenle veya bu değişkenle açıkça bir yöntemi çağırdığınızda gerçekleşmesidir .
Aksine, aşağıdaki çağrı tamamen açık olacaktır:
char[] x = null;
doSomething(x);
Değeri hala iletiyor olsanız null
da, değişkenin türünü hesaba katacağı için Java tam olarak hangi yöntemi çağıracağını bilir.
Integer
içinint
.