ホームページ  >  記事  >  Java  >  オーバーロードされたメソッドを呼び出すときにサブクラスがエラーを報告するのはなぜですか?

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

王林
王林オリジナル
2024-03-08 17:33:03567ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。