ポリモーフィズム: Java でのメソッドのオーバーライドのデコード

Mary-Kate Olsen
リリース: 2024-11-02 18:14:02
オリジナル
929 人が閲覧しました

Polymorphism: Decoding Method Overriding in Java

メソッドのオーバーライド は、Java のポリモーフィズムの中核概念の 1 つであり、サブクラスがそのスーパークラスですでに定義されているメソッドの特定の実装を提供できるようにします。この強力な機能は、ランタイムポリモーフィズムの実現に役立ち、動的メソッドディスパッチを可能にします。この投稿では、メソッドのオーバーライドを徹底的に理解するために、重要な概念、ルール、実際の例について詳しく説明します。


メソッドのオーバーライドとは何ですか?

メソッドのオーバーライドは、サブクラスが 同じメソッド シグネチャ (同じ名前、パラメーター、戻り値の型または共変戻り値の型) を使用してスーパークラスからメソッドを再定義するときに発生します。コンパイル時に解決されるメソッドのオーバーロードとは異なり、メソッドのオーバーライドではランタイムポリモーフィズムが実現され、実際に呼び出されるメソッドはオブジェクトのランタイム型に依存します。


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() はプライベートであり、サブクラスによって継承されないためオーバーライドできません。


2.子クラスでのメソッドのオーバーライド

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() を呼び出すと、子のバージョンが呼び出されます。これは 実行時ポリモーフィズム の動作です。


3.共変の戻り値の型: 実用的な例

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 ではオーバーライドされたメソッドのアクセス レベルを下げることができないことが要求されているため、メソッドはパブリックのままです。


メソッドのオーバーライドとメソッドのオーバーロード

  • メソッドのオーバーライドにより、動的なポリモーフィズムが有効になり、継承階層で動作します。
  • メソッドのオーバーロードは、異なるパラメーターの型または数値を持つことによって同じクラス内で達成される静的多態性の一種です。

メソッドのオーバーライドを使用する場合

  1. 動的メソッド解決: オーバーライド メソッドは実行時にオブジェクト タイプに基づいて解決されるため、柔軟性が高まります。
  2. 動作の拡張: サブクラスは、スーパークラス メソッドの機能を変更または拡張できます。

結論

メソッドのオーバーライドを理解して適用することで、オブジェクト指向プログラミングの原則に準拠した、より柔軟で再利用可能でポリモーフィックな Java アプリケーションを構築できます。


関連記事

  • Java の基礎

  • アレイインタビューの要点

  • Java メモリの基礎

  • Java キーワードの基礎

  • コレクション フレームワークの基本

コーディングを楽しんでください!

以上がポリモーフィズム: Java でのメソッドのオーバーライドのデコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!