これがその例です。
class ParentReturnType {}
class ChildReturnType extends ParentReturnType {}
class Parent {
ParentReturnType foo() {...}
}
class Child<R extends ChildReturnType> extends Parent {
@Override
R foo() {...}
}
classChildに対して、javacという名前の 2 つのメソッドを生成しますfoo。
- 最初は を
foo()返しますChildReturnType。その本体は で定義したものですChild.foo() - 2 番目は を
foo()返しますParentReturnType。これは単純に最初の呼び出しを呼び出しますfoo()
javacの 2 つのバージョンを生成する理由がよくわかりませんfoo()。
(ソースコードで) で定義された本体foo()で返される1 つのバージョンで十分だと思います。ParentReturnTypeR foo()