我有两个看起来像这样的接口:
interface Parent<T extends Number> {
T foo();
}
interface Child<T extends Integer> extends Parent<T> {
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个原始Parent对象,则调用foo()默认值返回a,Number因为没有类型参数.
Parent parent = getRawParent();
Number result = parent.foo(); // the compiler knows this returns a Number
Run Code Online (Sandbox Code Playgroud)
这是有道理的.
如果我有一个原始Child对象,我希望调用foo()将返回一个Integer相同的逻辑.但是,编译器声称它返回一个Number.
Child child = getRawChild();
Integer result = child.foo(); // compiler error; foo() returns a Number, not an Integer
Run Code Online (Sandbox Code Playgroud)
我可以覆盖Parent.foo()在Child解决这个问题,就像这样:
interface Child<T extends Integer> extends Parent<T> { …Run Code Online (Sandbox Code Playgroud)