1. ホーム
  2. java

[解決済み] 継承とポリモーフィズムの主な違いは何ですか?

2022-04-21 17:29:11

質問

今日、モジュール終了時のオープンブック試験でこの問題が出題され、迷ってしまいました。私は以下を読んでいました。 Head first Java とあり、どちらの定義も全く同じに思えました。MAINの違いは何なのか、自分の頭の片隅に置いておきたいと思いました。これと似たような質問がいくつもあることは知っていますが、明確な答えを出しているものは見たことがありません。

解決方法は?

継承とは、ある「クラス」が既存の「クラス」を派生させることです。 つまり、もし Person クラスがある場合、そのクラスには Student を拡張するクラスです。 Person , Student 継承 が持っているすべてのものを Person が持っています。 Personのフィールドやメソッドにつけるアクセス修飾子のあたりは細かいですが、基本的な考え方はこれです。 たとえば Person , Student プライベートフィールドはサブクラスからは見えないからです。

ポリモーフィズムは、プログラムがどのような種類のものを持っているかによって、どのメソッドを使用すべきかを決定する方法を扱います。 もし、あなたが Person を持ち、その read メソッドを持っており、あなたは Student を拡張する Person を実装しています。 read がある場合、どのメソッドが呼ばれるかはランタイムが決定します。 Person または Student . ちょっと面倒ですが、次のようなことをすると

Person p = new Student();
p.read();

のreadメソッドになります。 スチューデント が呼び出されます。 これがポリモーフィズムの動作です。 その代入ができるのは Student Person が、ランタイムは賢いので、実際の型は p 学生 .

なお、言語によって詳細は異なります。 例えば、javascriptでも継承は可能ですが、Javaでの動作とは全く異なります。