class Test {
public static void main(String[] args) {
Animal a = new Dog();
Dog d = new Dog();
d.makeNoise(); // output "Sub"
a.makeNoise(); // output "Sub" then what is use of calling this. why not call d.makeNoise() only.
}
}
abstract class Animal {
public void makeNoise() {
System.out.println("Super");
}
}
class Dog extends Animal {
@Override
public void makeNoise() {
System.out.println("Sub");
}
}
У нас было 15 минут обсуждения по этой теме (15 минут слишком долго, я думаю) я объяснил интервьюеру о том, как динамический полиморфизм будет достигнуто с помощью a.makeNoise();
, но все же она говорила, как дают тот же результат ,
a.makeNoise();
вывод «Sub», то, что используется для вызова этого. почему бы не вызвать d.makeNoise() только
Я тоже пошел в интерфейс, но все же вопрос заключался в том, что ссылка подкласса дает тот же результат, а затем зачем использовать ссылку на суперкласс.
динамический полиморфизм
Вопрос собеседника был, какая разница
a.makeNoise();
делает? почему бы не позвонитьd.makeNoise();
только тогда, когда оба дают одинаковый выход?
Какой может быть правильный ответ?
возможный правильный ответ на какой вопрос? – NPE
В чем вопрос? – benzonico
Ответ заключается в том, что вы не понимаете полиморфизм! – John3136