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