ホームページ > Java > &#&チュートリアル > Java でオーバーライドするメソッドは異なる戻り値の型を持つことができますか?

Java でオーバーライドするメソッドは異なる戻り値の型を持つことができますか?

DDD
リリース: 2024-11-25 02:35:16
オリジナル
506 人が閲覧しました

Can Overriding Methods in Java Have Different Return Types?

Java での共変戻り型によるメソッドのオーバーライド

一般に信じられているにもかかわらず、オーバーライドされたメソッドの戻り値が逸脱する可能性は実際にあります。 Java の型。具体的には、Java では共変の戻り値の型が許可されており、オーバーライドするメソッドがオーバーライドされたメソッドよりも洗練された戻り値の型を持つことができます。これには、オーバーライドするメソッドの戻り値の型が、オーバーライドされるメソッドの戻り値の型に割り当て可能でなければならないことが含まれます。

説明的な例は、次のコード スニペットです。

class ShapeBuilder {
    ...
    public Shape build() {
        ....
    }
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
        ....
    }
}
ログイン後にコピー

この例では、 、CircleBuilder クラスの build() メソッドは、ShapeBuilder から継承された build() メソッドをオーバーライドします。重要なのは、CircleBuilder の build() メソッドが Circle オブジェクトを返すことです。これは、ShapeBuilder によって返される Shape オブジェクトと比較して、より具体的な型です。

この動作は、Java 言語仕様のセクション 8.4.5 で成文化されています。これは、「戻り値の型が参照型である場合、相互にオーバーライドするメソッド間で戻り値の型が異なる場合がある」と明示的に述べています。この原則は、共変の戻り値の概念を支えており、これにより、オーバーライドするメソッドの戻り値の型をサブタイプに特化できます。

さらに、この仕様では、2 つのメソッド間の戻り値の型の置換可能性のために満たさなければならない特定の条件について概説しています。 :

  • Void の戻り値の型は正確に一致する必要があります。
  • プリミティブの戻り値の型は正確に一致する必要があります。
  • 参照の戻り値の型は次のいずれかである必要があります。

    • お互いのサブタイプであること。
    • チェックされていない変換を介して互いのサブタイプに変換できること.

Java 以前5. Java は不変の戻り値の型を遵守しました。対照的に、共変の戻り値の型はメソッドのオーバーライドにおける柔軟性が高く、戻り値の型をオーバーライドされたメソッドの特定の実装とより密接に一致させることができます。

以上がJava でオーバーライドするメソッドは異なる戻り値の型を持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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