具有方法签名......
removeItem(SpecificItemThatExtendsGeneralItem item, String reason)
... 不实现...因为后者可以接受任何,包括那些不是SpecificItemThatExtendsGeneralItem
。
如果你可以改变抽象类,但是,那么你可以把它可能:
abstract class MyAbstractClass <T extends GeneralItem> {
abstract public void removeItem(T item, String reason);
}
class MySubclass extends MyAbstractClass<SpecificItemThatExtendsGeneralItem> {
@Override
public void removeItem(SpecificItemThatExtendsGeneralItem item,
String reason) {
// ...
}
}
在这种情况下,但是,请注意,类型MySubclass
然后仍然不符合MyAbstractClass<GeneralItem>
:
MyAbstractClass<GeneralItem> = new MySubclass(); // ERROR
虽然它是MyAbstractClass<?>
和MyAbstractClass<SpecificItemThatExtendsGeneralItem>
兼容:
MyAbstractClass<?> c = new MySubclass(); // ok
MyAbstractClass<SpecificItemThatExtendsGeneralItem> = new MySubclass(); // ok
如果将它传递给OtherSpecificItemThatExtendsGeneralItem会发生什么? – immibis 2015-02-11 20:48:19
这绝不会发生 – 2015-02-11 20:53:14
但是,如果其他人编写该代码并实现它,该怎么办? – immibis 2015-02-11 20:53:53