ホームページ Java &#&チュートリアル オーバーロードされたメソッドを呼び出すときにサブクラスがエラーを報告するのはなぜですか?

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

Mar 08, 2024 pm 05:33 PM
コンパイルエラー

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

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Sublime で Python コードを実行するときに押すキー Sublime で Python コードを実行するときに押すキー Apr 03, 2024 pm 03:54 PM

Sublime で Python コードを実行するときに押すキー

C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには? C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには? May 01, 2024 pm 10:27 PM

C++関数継承の詳しい解説:継承で「基底クラスポインタ」と「派生クラスポインタ」を使うには?

notepad++でC言語を実行する方法 notepad++でC言語を実行する方法 Apr 08, 2024 am 10:06 AM

notepad++でC言語を実行する方法

Numpy インストールガイド: インストールの問題を 1 つの記事で解決する Numpy インストールガイド: インストールの問題を 1 つの記事で解決する Feb 21, 2024 pm 08:15 PM

Numpy インストールガイド: インストールの問題を 1 つの記事で解決する

Javaでのvalの意味は何ですか Javaでのvalの意味は何ですか Apr 25, 2024 pm 10:06 PM

Javaでのvalの意味は何ですか

Java で = は何を意味しますか Java で = は何を意味しますか Apr 26, 2024 pm 11:30 PM

Java で = は何を意味しますか

C++ における const と static の違い C++ における const と static の違い May 01, 2024 am 10:54 AM

C++ における const と static の違い

Java ジェネリック メソッドで型パラメータを制限するにはどうすればよいですか? Java ジェネリック メソッドで型パラメータを制限するにはどうすればよいですか? Apr 30, 2024 pm 01:30 PM

Java ジェネリック メソッドで型パラメータを制限するにはどうすればよいですか?

See all articles