具有方法簽名......
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