メソッドのオーバーライド は、Java のポリモーフィズムの中核概念の 1 つであり、サブクラスがそのスーパークラスですでに定義されているメソッドの特定の実装を提供できるようにします。この強力な機能は、ランタイムポリモーフィズムの実現に役立ち、動的メソッドディスパッチを可能にします。この投稿では、メソッドのオーバーライドを徹底的に理解するために、重要な概念、ルール、実際の例について詳しく説明します。
メソッドのオーバーライドは、サブクラスが 同じメソッド シグネチャ (同じ名前、パラメーター、戻り値の型または共変戻り値の型) を使用してスーパークラスからメソッドを再定義するときに発生します。コンパイル時に解決されるメソッドのオーバーロードとは異なり、メソッドのオーバーライドではランタイムポリモーフィズムが実現され、実際に呼び出されるメソッドはオブジェクトのランタイム型に依存します。
1.メソッド署名の一貫性:
2.戻り値の型と共変の戻り値の型:
3.アクセス修飾子:
公開>保護中 >デフォルト (パッケージ-プライベート) >プライベート
4.メソッドの可視性:
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
MethodOverridingParent では、display() と getCount() のみが親クラスを超えてアクセスできるため、サブクラスによってオーバーライドできます。ただし、getName() はプライベートであり、サブクラスによって継承されないためオーバーライドできません。
package oops.polymorphism; public class MethodOverridingChild extends MethodOverridingParent { // Access Level Increased; Default -> Protected @Override protected void display() { System.out.println("Child Method Called"); } public static void main(String[] args) { // Calling Parent Class Method MethodOverridingParent parent = new MethodOverridingParent(); parent.display(); // Output: Parent Method Called // Calling Child Class Overridden Method - Runtime Polymorphism MethodOverridingParent child = new MethodOverridingChild(); child.display(); // Output: Child Method Called } }
説明: display() はサブクラス MethodOverridingChild でオーバーライドされるため、MethodOverridingChild インスタンスで display() を呼び出すと、子のバージョンが呼び出されます。これは 実行時ポリモーフィズム の動作です。
Java の 共変戻り型 のサポートにより、サブクラスはスーパークラスの戻り型よりも具体的な型を返すことができます。このアプローチは、SOLID 原則の Liskov 置換原則 に従っており、コードの柔軟性が強化されています。
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
説明: CovariantReturnType では、getCount() は、共変戻り値の型 を示す Number のサブタイプである Integer を返すことによって親のメソッドをオーバーライドします。 Java ではオーバーライドされたメソッドのアクセス レベルを下げることができないことが要求されているため、メソッドはパブリックのままです。
メソッドのオーバーライドを理解して適用することで、オブジェクト指向プログラミングの原則に準拠した、より柔軟で再利用可能でポリモーフィックな Java アプリケーションを構築できます。
Java の基礎
アレイインタビューの要点
Java メモリの基礎
Java キーワードの基礎
コレクション フレームワークの基本
コーディングを楽しんでください!
以上がポリモーフィズム: Java でのメソッドのオーバーライドのデコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。