[解決済み] 継承とポリモーフィズムの主な違いは何ですか?
質問
今日、モジュール終了時のオープンブック試験でこの問題が出題され、迷ってしまいました。私は以下を読んでいました。
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での動作とは全く異なります。
関連
-
IDEA パッケージステートメントの欠落
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー java.util.NoSuchElementException
-
プロローグでのコンテンツは禁止されています
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
javaでクラスを作成すると、enclosing classでないように見える
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
[解決済み] ポリモーフィズム vs オーバーライド vs オーバーローディング