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 つのメソッド間の戻り値の型の置換可能性のために満たさなければならない特定の条件について概説しています。 :
参照の戻り値の型は次のいずれかである必要があります。
Java 以前5. Java は不変の戻り値の型を遵守しました。対照的に、共変の戻り値の型はメソッドのオーバーライドにおける柔軟性が高く、戻り値の型をオーバーライドされたメソッドの特定の実装とより密接に一致させることができます。
以上がJava でオーバーライドするメソッドは異なる戻り値の型を持つことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。