ホームページ >Java >&#&チュートリアル >Java でメソッドをオーバーライドすると、異なる戻り値の型が使用できるのはどのような場合ですか?

Java でメソッドをオーバーライドすると、異なる戻り値の型が使用できるのはどのような場合ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 19:03:14275ブラウズ

When Can Overriding Methods in Java Have Different Return Types?

メソッドのオーバーライドにおける共変の戻り値の型

Java のオーバーライド メソッドは、特定の条件が満たされていれば、戻り値の型が異なる場合があります。具体的には、Java は共変の戻り値の型をサポートしており、オーバーライドするメソッドがオーバーライドするメソッドよりも具体的な戻り値の型を持つことができます。

Java 言語仕様 (JLS) セクション 8.4.5 によれば、これは次の限り許容されます。次のルールが遵守されているため:

  • 元のメソッドが void を返した場合、オーバーライドするメソッドも返す必要があります。 void.
  • 元のメソッドがプリミティブ型を返す場合、オーバーライドするメソッドは同じプリミティブ型を返す必要があります。
  • 元のメソッドが参照型を返す場合:

    • オーバーライドするメソッドの戻り値の型は、元のメソッドの戻り値のサブタイプである必要がありますtype.
    • あるいは、オーバーライドするメソッドの戻り値の型は、元のメソッドの戻り値の型の未チェックの変換から生じることもあります。または、
    • オーバーライドするメソッドの戻り値の型は、元のメソッドの戻り値の型の消去 (ジェネリック型パラメータの後

たとえば、次のコードを考えてみましょう。

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

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
        ....
    }
}

この例では、CircleBuilder の build() メソッドが build( ) ShapeBuilder のメソッド。オーバーライドされたメソッドの戻り値の型は Shape ですが、オーバーライドされたメソッドの戻り値の型は、Shape のサブタイプである Circle です。これは、Java の共変戻り型ルールによって許可されています。

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

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