オーバーロードされたメソッドを呼び出すときにサブクラスがエラー メッセージを生成するのはなぜですか?

PHPz
リリース: 2024-03-08 11:15:03
オリジナル
416 人が閲覧しました

オーバーロードされたメソッドを呼び出すときにサブクラスがエラー メッセージを生成するのはなぜですか?

オーバーロードされたメソッドを呼び出すときにサブクラスがエラー メッセージを生成するのはなぜですか?
オブジェクト指向プログラミングにおけるオーバーロードは、同じクラス内に同じ名前の複数のメソッドを定義する手法です。オーバーロードされたメソッドを呼び出すとき、コンパイラは、メソッドのパラメータの型、数、または順序に基づいて、呼び出す特定のメソッドを決定します。ただし、親クラスで定義されたオーバーロードされたメソッドをサブクラスが継承すると、エラー メッセージが表示されることがあります。具体的なコード例で説明してみましょう。

親クラス Parentpublic void print(int a) および public void print(String s)# # に定義されたオーバーロードされたメソッドがあるとします。 #、サブクラス Child は親クラスを継承し、これら 2 つのオーバーロードされたメソッドを呼び出そうとします。次のサンプル コードを見てみましょう:

public class Parent {
    public void print(int a) {
        System.out.println("Printing integer: " + a);
    }

    public void print(String s) {
        System.out.println("Printing string: " + s);
    }
}

public class Child extends Parent {
    public static void main(String[] args) {
        Child child = new Child();
        child.print(10);  // 调用父类的重载方法 print(int a)
        child.print("Hello");  // 调用父类的重载方法 print(String s)
    }
}
ログイン後にコピー

上記のコードでは、サブクラス

Child は、インスタンス化後に親クラス Parent のオーバーロードを呼び出します。この例では問題ありません。両方のオーバーロードされたメソッドが正常に呼び出され、正しい結果が出力されます。ただし、同じ名前のメソッドがサブクラスでオーバーライドされると、エラー メッセージが生成される場合があります。次の例を見てみましょう。

public class Child extends Parent {
    public void print(double d) {
        System.out.println("Printing double: " + d);
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.print(10);  // Error: The method print(int) is ambiguous for the type Child
        child.print("Hello");  // 调用父类的重载方法 print(String s)
        child.print(10.5);  // 调用子类的重载方法 print(double d)
    }
}
ログイン後にコピー

この例では、サブクラス

Child が親クラスのオーバーロード メソッドを継承し、新しいオーバーロード メソッドを追加しますpublic void print(double d )child.print(10) を呼び出そうとすると、コンパイラはエラー メッセージを表示します: The method print(int) isambiguous for the type Child. これは、コンパイラが、次のメソッドが Child 型であることを判断できないためです。 print(int a) は依然としてサブクラスの print(double d) です。

この問題を解決するには、呼び出すメソッドを明示的に指定するか、サブクラス内の親クラスの既存のメソッドのオーバーロードを避けることができます。サブクラスのメソッドが親クラスのメソッドと競合すると、コンパイラはどのメソッドを呼び出すかを決定できず、エラー メッセージが生成されます。

オブジェクト指向プログラミングでは、オーバーロードと継承の概念を理解することが非常に重要であり、これらの機能を完全に理解することによってのみ、より堅牢で明確なコードを記述することができます。

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

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