[解決済み] ポリモーフィズム vs オーバーライド vs オーバーローディング
2022-03-14 22:49:12
質問
Javaで言えば、誰かに聞かれたとき。
<ブロッククオートポリモーフィズムとは何ですか?
Would オーバーローディング または オーバーライド という答えが返ってくるのでしょうか?
もうちょっとあると思うんですけどね。
抽象的なベースクラスで実装のないメソッドを定義し、そのメソッドをサブクラスで定義した場合、それはやはりオーバーライドになるのでしょうか?
私が思うに オーバーローディング が正解でないことは確かです。
どのように解決するのですか?
ポリモーフィズムを表現する最も明確な方法は、抽象的な基底クラス(またはインターフェース)を用いることです。
public abstract class Human{
...
public abstract void goPee();
}
このクラスが抽象的なのは
goPee()
メソッドは、Humans では定義できません。 これは、サブクラスであるMaleとFemaleに対してのみ定義可能です。 また、Humanは抽象的な概念であり、MaleでもFemaleでもないHumanを作ることはできません。 どちらか一方でなければなりません。
そこで、抽象クラスを使って実装を先送りします。
public class Male extends Human{
...
@Override
public void goPee(){
System.out.println("Stand Up");
}
}
そして
public class Female extends Human{
...
@Override
public void goPee(){
System.out.println("Sit Down");
}
}
これで、人間だらけの部屋に「おしっこしてこい」と言えるようになりました。
public static void main(String[] args){
ArrayList<Human> group = new ArrayList<Human>();
group.add(new Male());
group.add(new Female());
// ... add more...
// tell the class to take a pee break
for (Human person : group) person.goPee();
}
これを実行すると、次のようになります。
Stand Up
Sit Down
...
関連
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
プロローグでのコンテンツは禁止されています
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?
-
[解決済み] いつ使うか。Java 8+のインターフェイスのデフォルトメソッドと、抽象的なメソッドの比較
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
最新
-
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
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
org.glassfish.jersey.servlet.ServletContainer
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決