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 Integertüm alabilir nullgeç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 Objectsü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 Integersürümler mevcut olduğunda, ikisi de daha spesifiktir Objectancak 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 nulloldukç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 nullda, değişkenin türünü hesaba katacağı için Java tam olarak hangi yöntemi çağıracağını bilir.
Integeriçinint.