継承におけるJavaアップキャスティングまたはポリモーフィズム

raven39
class Movie {
    public void play() {
        System.out.println("playing movie");
    }

}

class DVD extends Movie {
    @Override
    public void play() {
        System.out.println("playing dvd");
    }

    public void menu() {
        System.out.println("showing menu");
    }

}

public class Main {
    public static void main(String[] args) {
        Movie m = new DVD();
        m.play();
        m.menu(); //error
    }
}

私の理解では、mはDVDオブジェクトです。そのため「DVD再生」を印刷します。しかし、なぜ

m.menu()

親クラスのMovieからオーバーライドされていない場合、エラーが発生しますか?Movieクラスにmenu()メソッドがないという不満があります。

また、どのような状況で、あるオブジェクトを次のように宣言しますか

Parent obj = new children();

このような?子クラスのメソッドが親からオーバーライドされていることを確認したいときにこれを行いますか?その場合は、親クラスのメソッドを「抽象」にしたり、親をインターフェイスとして作成したりしませんか?私のタイトルは誤解を招く可能性がありますが、この動作はアップキャスティングと呼ばれていますか?または多形?j

yshavit

あなたが見るときMovie m = new DVD()、あなた、人間は、それmがDVDであることを知っています。しかし、コンパイラはそれを知りません-それが知っているべきだとあなたが言ったのはそれだけなので、それはそれが映画であることを知っているだけです。したがって、を見るとm.menu()、Movieでそのメソッドを探しますが、見つかりません。コードを分析して、それmが実際にはMenuのサブクラスであり、具体的にはDVDであり、そのクラスにが含まれいることを確認することありませmenu()を考えるだけなMovie mので、Movieにはメソッドがないと文句を言いmenu()ます。

これはJavaで常に発生し、次のような行が表示される場合があります。

List<Foo> myList = new ArrayList<>();

「インターフェースにプログラムする」とはどういう意味ですか?」を参照してくださいなぜあなたがそれをしたいかについて。ただし、質問については、特にArrayListtrimToSize()がListで定義されていないメソッド定義していることに注意してくださいmyList上記のように宣言した場合、を呼び出すことはできませんmyList.trimToSize()

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javaポリモーフィズム/キャスティング/メソッド

分類Dev

ポリモーフィズム継承クラスプロパティ

分類Dev

ポリモーフィズム、ダウンキャスティング、および仮想関数

分類Dev

ポリモーフィズムとダウンキャスティング

分類Dev

概念ベースのポリモーフィズムc ++による多重継承

分類Dev

同じ署名を持つメンバー関数を呼び出すために、関数テンプレートインスタンスの代わりに継承とポリモーフィズムを使用するのはなぜですか?

分類Dev

インターフェイスで継承とポリモーフィズムを効果的に利用する方法

分類Dev

ゲームデザインでのポリモーフィズム、キャスティング、メソッドオーバーライドのJava実装

分類Dev

ポリモーフィズム/継承を使用して、ネストされたifステートメントをPythonのクラスにリファクタリングする

分類Dev

Avroスキーマのポリモーフィズムと継承

分類Dev

C ++インターフェース、継承、ポリモーフィズム

分類Dev

Javaの継承とポリモーフィズム

分類Dev

Javaの継承とポリモーフィズム

分類Dev

ポリモーフィズムとポインターを使用した構造体によるキャスト

分類Dev

ジャクソンプロパティのスプリングブートとポリモーフィズム

分類Dev

継承とポリモーフィズムの奇妙な振る舞い[Java]

分類Dev

C ++のポリモーフィズムにのみ継承を使用する

分類Dev

スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

分類Dev

スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

分類Dev

Javaポリモーフィズムにおけるオブジェクトのフィールドアクセスとメモリ割り当て

分類Dev

スタイル転送アルゴリズムを実行するには、かなり優れたパフォーマンスのディープラーニング アーキテクチャを求めます。

分類Dev

ジェネリックインターフェイスポリモーフィズムキャスティングエラー

分類Dev

ジェネリッククラスを継承する際のポリモーフィズム

分類Dev

C#ポリモーフィズム-継承されたタイプを指定する

分類Dev

ポリモーフィズムは、継承の単なる副作用ではありませんか?

分類Dev

カプセル化、抽象化、ポリモーフィズムには継承が必要ですか?

分類Dev

Javaにおけるポリモーフィズムの小さな誤解

分類Dev

ポリモーフィズムによる複数の保護された継承

分類Dev

おっとの柱としてのポリモーフィズムと継承

Related 関連記事

  1. 1

    Javaポリモーフィズム/キャスティング/メソッド

  2. 2

    ポリモーフィズム継承クラスプロパティ

  3. 3

    ポリモーフィズム、ダウンキャスティング、および仮想関数

  4. 4

    ポリモーフィズムとダウンキャスティング

  5. 5

    概念ベースのポリモーフィズムc ++による多重継承

  6. 6

    同じ署名を持つメンバー関数を呼び出すために、関数テンプレートインスタンスの代わりに継承とポリモーフィズムを使用するのはなぜですか?

  7. 7

    インターフェイスで継承とポリモーフィズムを効果的に利用する方法

  8. 8

    ゲームデザインでのポリモーフィズム、キャスティング、メソッドオーバーライドのJava実装

  9. 9

    ポリモーフィズム/継承を使用して、ネストされたifステートメントをPythonのクラスにリファクタリングする

  10. 10

    Avroスキーマのポリモーフィズムと継承

  11. 11

    C ++インターフェース、継承、ポリモーフィズム

  12. 12

    Javaの継承とポリモーフィズム

  13. 13

    Javaの継承とポリモーフィズム

  14. 14

    ポリモーフィズムとポインターを使用した構造体によるキャスト

  15. 15

    ジャクソンプロパティのスプリングブートとポリモーフィズム

  16. 16

    継承とポリモーフィズムの奇妙な振る舞い[Java]

  17. 17

    C ++のポリモーフィズムにのみ継承を使用する

  18. 18

    スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

  19. 19

    スレッドのサブクラスのオブジェクトをインスタンス化するために継承とポリモーフィズムを使用することの主な違いは何ですか?

  20. 20

    Javaポリモーフィズムにおけるオブジェクトのフィールドアクセスとメモリ割り当て

  21. 21

    スタイル転送アルゴリズムを実行するには、かなり優れたパフォーマンスのディープラーニング アーキテクチャを求めます。

  22. 22

    ジェネリックインターフェイスポリモーフィズムキャスティングエラー

  23. 23

    ジェネリッククラスを継承する際のポリモーフィズム

  24. 24

    C#ポリモーフィズム-継承されたタイプを指定する

  25. 25

    ポリモーフィズムは、継承の単なる副作用ではありませんか?

  26. 26

    カプセル化、抽象化、ポリモーフィズムには継承が必要ですか?

  27. 27

    Javaにおけるポリモーフィズムの小さな誤解

  28. 28

    ポリモーフィズムによる複数の保護された継承

  29. 29

    おっとの柱としてのポリモーフィズムと継承

ホットタグ

アーカイブ