サブクラスがオーバーロードされたメソッドを呼び出すと例外が発生するのはなぜですか?

WBOY
リリース: 2024-03-08 16:48:04
オリジナル
533 人が閲覧しました

サブクラスがオーバーロードされたメソッドを呼び出すと例外が発生するのはなぜですか?

サブクラスがオーバーロードされたメソッドを呼び出すと例外が発生するのはなぜですか?

オブジェクト指向プログラミングでは、オーバーロードとは、同じクラス内で複数のメソッドを定義することを指します。これらのメソッドは同じ名前ですが、異なる機能実装を実現するために異なるパラメーター リストを持ちます。サブクラスが親クラスを継承する場合、サブクラス内に同名のメソッドのオーバーロードがあると例外が発生することがあります。

サブクラスがオーバーロードされたメソッドを呼び出すときに例外がスローされる理由をより具体的に説明するために、次のコード例を見てみましょう:

class Parent {
    void display() {
        System.out.println("Parent class display method");
    }
    void display(int num) {
        System.out.println("Parent class display method with parameter");
    }
}

class Child extends Parent {
    void display() {
        System.out.println("Child class display method");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent parent = new Child();
        parent.display();
        parent.display(10);
    }
}
ログイン後にコピー

上記のコードでは、親クラス ## を定義します。 #Parent とサブクラス Child。親クラスには 2 つのオーバーロードされた display メソッドがあり、パラメーターのないバージョンと整数パラメーターのあるバージョンです。サブクラス Child は親クラス Parent から継承し、親クラスの display メソッドをオーバーライドします。

Main クラスで、親クラスからサブクラスのオブジェクトへの参照を作成します。次に、display メソッドと display(int num) メソッドをそれぞれ呼び出してみます。ポリモーフィズムの原理によれば、参照変数は親クラス型であり、実際のオブジェクトはサブクラス型であるため、サブクラス Child 内のメソッドを呼び出す必要があります。

しかし、プログラムを実行すると、

display メソッドのみが呼び出され、display(int num)## の呼び出し時にコンパイル エラーが発生することがわかります。 # 方法。これは、継承関係において、サブクラスが親クラスのメソッドをオーバーライドする場合、親クラスのメソッドは上書きされず、新しいオーバーロードされたメソッドが追加されるだけであるためです。したがって、オーバーロードされたメソッドが親クラス参照を通じて呼び出される場合、コンパイラは、子クラスのオーバーロードされたメソッドではなく、親クラスで定義されたメソッドを呼び出すことを選択します。 この問題を解決するには、親クラスのメソッドを

final

として宣言するか、親クラスのすべてのメソッドを子クラスでオーバーロードして、子が確実に呼び出されるようにします。例外をスローしないクラス内のメソッド。 要約すると、継承関係において、親クラスのメソッドをオーバーロードしているサブクラスは親クラスのメソッドをオーバーライドしないため、サブクラスがオーバーロードされたメソッドを呼び出すと例外がスローされます。そのため、次の場合に注意する必要があります。この状況を回避するために使用します。

以上がサブクラスがオーバーロードされたメソッドを呼び出すと例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート