簡単に言えば、異なるオブジェクトは同じ動作を完了しますが、異なる状態を生成します
非常に単純な例: 学校のクラス生徒は同じ試験を受けます。試験後のテストの成績は生徒によって異なります。不合格者、合格ライン付近をさまよう者、高得点者もいます。では、あなたはどのくらいのレベルですか~(  ̄▽ ̄)~
達成するには多態性、条件が必要です。特定の条件は次のとおりです:
1. 継承システムの下にあり、上向き変換が発生している必要があります。
2 . サブクラスは、そのメソッドをオーバーライドする必要があります。親クラス
3. 親クラスの参照を介して書き換えられたメソッドを呼び出す
上記に関係する新しい概念の一部については、以下で詳しく紹介します
以前に作成したクラスを変更します。
class Plant { String name; String source; String genu; public void func() { System.out.println("父类方法"); } } class Tree extends Plant { public void trait() { System.out.println("子类方法"); } }
いわゆる上向き変換は、サブクラス オブジェクトを作成し、それを親クラスとして使用します
具体的な操作は次のとおりです。
Plant tree=new Tree();
親クラスとして使用されるため、現時点ではtreeはサブクラスのメソッドを呼び出すことができません
#Java には下向き変換がありますが、下向き変換は安全ではないため省略します2.2 上向き変換の一般的な形式上の例では、最初の: direct です。 assign また、メソッド ## のパラメータとして メソッドの戻り値として 2 つの形式があります。
#3. 書き換え
は、サブクラスが親クラスのメソッドを書き換えることを意味します。このメソッドはコンストラクターにすることも、プライベートまたは最終的な静的メソッドにすることもできません書き換えるのはメソッドの内容です。メソッド名、戻り値、メソッドのパラメータは変更できません。クラスは引き続き変更します:class Plant { String name; String source; String genu; public void trait() { System.out.println("父类方法"); } } class Tree extends Plant { @Override //注解,此注解可以进行一些合法性校验 public void trait() { System.out.println("子类方法"); } }
1. static、final、private の変更されたメソッドおよびコンストラクター メソッドはオーバーライドできません
2. サブクラス メソッドのアクセス権は親クラス以上である必要があります
3. JDK7 以降、オーバーライドされたメソッドの戻り値の型は異なっていても構いませんが、共変型である親子関係が必要です
最後の点は個別に説明します。親クラスのコンストラクターがオーバーライドされたメソッドを呼び出すと仮定します。これは、サブクラスのコンストラクターが最初に親クラスのコンストラクターを呼び出すため、そのオブジェクトサブクラスは完全に構築される前に動的です。バインディングは書き換えられたメソッドを呼び出します。この場合、プログラムに問題が発生する可能性が大幅に高くなります。
上方変換と書き換えを理解すれば、実装方法は基本的にわかります。 Java のポリモーフィズム: 継承におけるシステムは、上方変換と書き換えを組み合わせてポリモーフィズムを実現します
以上がJava ポリモーフィズムの概念は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。