我有以下代码示例:
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()
,是什么叫“动态方法调度”?)
答案 0 :(得分:4)
如果按照你说的那样做,那么你就无法利用多态性,例如
for(Primate p : primateList){
p.sayType(); //
}
通过这种方式,您可以让Objects执行预定义的方法名称,并确保它始终具有相同的名称。
答案 1 :(得分:1)
嗯,你可以,但是Primate b = new Human(); b.sayType();
会输出“我是灵长类动物”。此外,您将无法通过对humanHello
的引用访问Primate
,除非您采用了令人讨厌的引用,如果引用未引用Human
实例,则会失败
如果您有灵长类动物(人类,长臂猿等)的容器,并且您希望通过特定参考访问正确的方法,则覆盖非常有用。