ホームページ > Java > &#&チュートリアル > サブクラス内のメソッドをオーバーロードするとエラーが発生するのはなぜですか?

サブクラス内のメソッドをオーバーロードするとエラーが発生するのはなぜですか?

王林
リリース: 2024-03-08 14:12:03
オリジナル
992 人が閲覧しました

サブクラス内のメソッドをオーバーロードするとエラーが発生するのはなぜですか?

サブクラスのメソッドをオーバーロードするとエラーが発生します。これは、継承関係において、サブクラスが親クラスのメソッドをオーバーロードすると、コンパイラがどのメソッドを呼び出すかを判断できなくなり、プログラムが曖昧になる可能性があるためです。エラー。この記事では、具体的なコード例を使用してこれを説明します。

オブジェクト指向プログラミングでは、サブクラスは親クラスのメソッドをオーバーライドできます。つまり、親クラスと同じ名前のメソッドをサブクラス内で再定義できます。親クラスとサブクラスに同じ名前のメソッドが存在する場合、コンパイラはメソッド呼び出し時にオブジェクトの型に基づいてどちらのメソッドを呼び出すかを決定します。ただし、メソッドをオーバーロードするときに特殊な状況が発生すると、プログラム エラーが発生する可能性があります。

以下では、簡単なコード例を通じてこの問題を説明します。

public class Parent {
    public void print() {
        System.out.println("This is parent class");
    }
}

public class Child extends Parent {
    public void print() {
        System.out.println("This is child class");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.print();
    }
}
ログイン後にコピー

上記のコードでは、親クラス Parent とサブクラス Child が定義されており、それぞれに print メソッドの名前が含まれています。 。 Mainクラスのmainメソッドでは、Parentクラスのオブジェクトobjが作成され、Childクラスのオブジェクトとしてインスタンス化されます。次に、obj の print メソッドを呼び出します。

オブジェクト指向プログラミングのポリモーフィズム原則に従って、コンパイラは obj の型を親クラスとみなしますが、実際には、obj が指すオブジェクトは子クラスのオブジェクトです。サブクラスは親クラスの print メソッドをオーバーロードするため、obj.print() が呼び出されると、コンパイラは親クラスの print メソッドではなくサブクラスの print メソッドを優先します。したがって、プログラムは「これは子クラスです」と出力します。

ただし、サブクラスのオーバーロードされた親クラスのメソッドのパラメータ リストと戻り値の型が異なるなど、特殊な状況がある場合、コンパイラはどのメソッドを呼び出すかを判断できず、エラーが発生します。 。 Child クラスの print メソッドを変更して、その戻り値の型を int に変更しましょう。

public class Child extends Parent {
    public int print() {
        System.out.println("This is child class");
        return 0;
    }
}
ログイン後にコピー

この時点で、コンパイラはエラーを報告し、「互換性のない戻り値の型」エラーが表示されます。コンパイラは、obj の型を通じてどの print メソッドを呼び出す必要があるかを判断できないため、つまり、返された型が void であるか int であるかを判断できないためです。この場合、コンパイラはメソッドを選択できず、プログラム エラーが発生します。

したがって、サブクラスが親クラスのメソッドをオーバーライドするときは、コンパイラが呼び出しメソッドを決定できない状況を避けるために、メソッドのパラメータ リストと戻り値の型が親クラスのメソッドと一貫していることを確認する必要があります。 、プログラムエラーが発生します。コードを記述するときは、エラーを回避し、プログラムが正しく動作するように、継承関係におけるメソッドのオーバーロードに注意する必要があります。

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

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