class One {
public void doThing(One o) {System.out.println("One");}
}
class Two extends One{
public void doThing(Two t) {System.out.println("Two");}
}
public class Ugly {
public static void main(String[] args) {
Two t = new Two();
One o = t;
o.doThing(new Two());
}
}
Результат: ОдинПочему метод суперкласса называется?
class One {
public void doThing(One o) {System.out.println("One");}
}
class Two extends One{
public void doThing(Two t) {System.out.println("Two");}
}
public class Ugly {
public static void main(String[] args) {
Two t = new Two();
One o = t;
t.doThing(new Two());
}
}
Результат: Два
Я знаю, что во время выполнения, даже если ссылка на объект из супер типа класса, фактический тип объекта будет известен и фактическое будет вызван метод объекта. Но если это так, то во время выполнения вызывается метод doThing(Two t)
, но вместо этого вызывается метод суперкласса doThing(One o)
. Я был бы рад, если бы кто-нибудь объяснил это
Во втором фрагменте кода он печатает «Два».
Вопрос: при вызове из суперкласса ссылки он называет doThing(One o)
при вызове из класса суб ссылки он называет doThing(Two o)
ПРИМЕЧАНИЕ: Я знаю, что я нахожусь над нагрузкой и не более верхом. Я отредактировал мой вопрос для лучшей ясности.
вы перегрузки, не перекрывая – nachokk
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.4 – nachokk
@nachokk: если вы отправили эту ссылку в качестве ответа, я бы выбрал вас как принятый ответ. Я никогда не думал о поиске спецификаций java. Thx man .., что было замечательной помощью .. –