Java では、オーバーロードされたメソッドを呼び出すときにサブクラスがエラーを報告することがよくあります。オーバーロードとは、同じ名前を持つ複数のメソッドがクラス内に定義されているが、パラメーター リストが異なる状況を指します。サブクラスが親クラスのオーバーロードされたメソッドを呼び出す必要がある場合、コンパイル エラーが発生することがあります。次に、特定のコード例を使用して、オーバーロードされたメソッドを呼び出すときにサブクラスがエラーを報告する理由を説明します。
親クラス ParentClass があり、2 つのオーバーロードされたメソッドを定義しているとします。
public class ParentClass { public void printInfo(String str) { System.out.println("Printing String: " + str); } public void printInfo(int num) { System.out.println("Printing Integer: " + num); } }
次に、サブクラス ChildClass を作成し、親クラスでオーバーロードされたメソッドの呼び出しを試みます。
public class ChildClass extends ParentClass { public void printInfo(double val) { System.out.println("Printing Double: " + val); } public static void main(String[] args) { ChildClass child = new ChildClass(); child.printInfo("Hello"); // 这行代码会报错 } }
上記のコードでは、サブクラス ChildClass は親クラス ParentClass を継承し、新しいオーバーロードされたメソッド printInfo(double val) を定義します。 main メソッドでは、ChildClass の子のインスタンスを作成し、親クラスで printInfo(String str) メソッドの呼び出しを試みます。
ただし、上記のコードをコンパイルしようとすると、次のコンパイル エラーが発生します:
Error: method printInfo in class ParentClass cannot be applied to given types; required: int found: java.lang.String
このエラーの理由は、Java がメソッドを呼び出すときに、メソッドが渡されるパラメータの数とタイプ。呼び出す特定のメソッドを決定します。この場合、サブクラス ChildClass は親クラスの printInfo(String str) メソッドを呼び出そうとしますが、このメソッドはサブクラスでオーバーロードされていないため、コンパイラは最も一致するメソッドを探し、printInfo(int num) メソッド 呼び出しは完了できますが、printInfo(String str) が見つかりません。
この問題を解決するには、親クラスのオーバーロードされたメソッドをサブクラスでオーバーライドするか、親クラスのオーバーロードされたメソッドを明示的に呼び出します。例:
public class ChildClass extends ParentClass { @Override public void printInfo(String str) { System.out.println("Overriding method in ChildClass: " + str); } public void callParentMethod(String str) { super.printInfo(str); // 显式调用父类中被重载的方法 } public static void main(String[] args) { ChildClass child = new ChildClass(); child.printInfo("Hello"); // 调用子类中重写的方法 child.callParentMethod("World"); // 显式调用父类中的重载方法 } }
親クラスのメソッドをオーバーライドするか、親クラスのメソッドを明示的に呼び出すことにより、サブクラスがオーバーロードされたメソッドを呼び出すときのエラーを回避できます。こうすることで、オーバーロードされたメソッドを呼び出すときにサブクラスがエラーを報告する理由をより深く理解し、そのような問題を解決する方法を学ぶことができます。
以上がオーバーロードされたメソッドを呼び出すときにサブクラスがエラーを報告するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。