为什么重写超类的方法,而不是给它一个不同的名字?

时间:2017-01-16 15:02:37

标签: java methods override

我有以下代码示例:

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(),是什么叫“动态方法调度”?)

2 个答案:

答案 0 :(得分:4)

如果按照你说的那样做,那么你就无法利用多态性,例如

for(Primate p : primateList){
  p.sayType(); // 
}

通过这种方式,您可以让Objects执行预定义的方法名称,并确保它始终具有相同的名称。

答案 1 :(得分:1)

嗯,你可以,但是Primate b = new Human(); b.sayType();会输出“我是灵长类动物”。此外,您将无法通过对humanHello的引用访问Primate,除非您采用了令人讨厌的引用,如果引用未引用Human实例,则会失败

如果您有灵长类动物(人类,长臂猿等)的容器,并且您希望通过特定参考访问正确的方法,则覆盖非常有用。