这就是例子。
class ParentReturnType {}
class ChildReturnType extends ParentReturnType {}
class Parent {
ParentReturnType foo() {...}
}
class Child<R extends ChildReturnType> extends Parent {
@Override
R foo() {...}
}
对于 class Child
,javac
产生两个名为 的方法foo
:
- 第一个
foo()
返回ChildReturnType
,它的主体是我们在Child.foo()
- 第二个
foo()
返回ParentReturnType
,它只是调用第一个foo()
我不太明白为什么javac
会产生两个版本的foo()
.
我相信foo()
返回ParentReturnType
的一个版本及其在(在源代码中)定义的主体R foo()
就足够了。