私は次のコード例があります。スーパークラスのメソッドをオーバーライドする理由は何ですか?
出力すべき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!
は、なぜ私はちょうど例えばhumanHello
にsayType
方法に名前を付け、@Override
いじり、後で混乱を避けることができません?私は初心者で、この例を別の場所に持ってきたので、あなたが私に見せるより複雑な使い方があるかもしれません。
(別の行 - Primate b = new Human()
、これは動的メソッドディスパッチですか?
これは「多型」と呼ばれます。あなたはそれについて読むべきです。これはオブジェクト指向プログラミングの重要な機能の1つです。 – RealSkeptic
この種の[多型](https://en.wikipedia.org/wiki/Polymorphism_(computer_science))の有用性は、 'primate.sayType()'を呼び出すコードを実行時の型を知らなくても書くことができることですその関数の正しい実装を取得します。 – khelwood
ポリモーフィズムに興味がない場合にJavaを使用する理由 – GhostCat