У меня есть следующий код:Зачем переопределять метод суперкласса, а не давать ему другое имя?
class Primate {
public void sayType() {
System.out.println("I'm a Primate");
}
}
class Human extends Primate {
public void sayType() {
System.out.println("I'm a Human!");
}
}
public class TalkingPrimates {
public static void main(String args[]) {
Primate a = new Primate();
Primate b = new Human();
a.sayType();
b.sayType();
}
}
, который должен вывести:
I'm a Primate I'm a Human!
Почему я не могу просто назвать метод sayType
к humanHello
, например, и избежать баловаться с @Override
и запутанной позже ? Я новичок, и я привел этот пример где-то в другом месте, поэтому, возможно, для него есть более сложные способы, которые вы покажете мне
(Другое дело - строка Primate b = new Human()
, это называется так называемая «отправка динамического метода»?)
Это называется «Полиморфизм». Вы должны прочитать об этом. Это одна из важных особенностей объектно-ориентированного программирования. – RealSkeptic
Полезность этого типа [полиморфизма] (https://en.wikipedia.org/wiki/Polymorphism_ (computer_science)) заключается в том, что вы можете написать код, который вызывает 'primate.sayType()', не зная его тип времени выполнения , и получить правильную реализацию этой функции. – khelwood
Зачем использовать Java, если вас не интересует полиморфизм? – GhostCat