2 回答

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果使抽象類泛型,則可以允許子類將自己指定為參數(shù)類型:
abstract class Event<T extends Event<T>> {
abstract boolean intersect(T object);
}
子類將能夠?qū)⑺鼈冏约旱念愋吐暶鳛閰?shù)。除非您的代碼庫(kù)使用原始類型,否則這應(yīng)該有效。
class SubClassEvent extends Event<SubClassEvent> {
@Override
boolean intersect(SubClassEvent object){return true;}
}
這個(gè)(或者更確切地說(shuō)是例外)的限制將是原始類型和其他類型事件的事件,這可以允許其他參數(shù)類型。

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
這在 Java 中是不可能的??紤]您有SubClassEvent
實(shí)現(xiàn)方法的子類boolean intersect(SubClassEvent e2)
。然后,如果它有一個(gè)進(jìn)一步的子類SubSubClassEvent extends SubClassEvent
,它將根據(jù)繼承在 Java 中的工作方式boolean intersect(SubClassEvent e2)
從繼承方法SubClassEvent
。
SubSubClassEvent
不必覆蓋該方法,因?yàn)樵摲椒ㄔ谄涑愔惺欠浅橄蟮?code>SubSubClass。但即使SubSubClassEvent
要覆蓋該方法,也必須使用簽名覆蓋它boolean intersect(SubClassEvent)
。如果它實(shí)現(xiàn)了一個(gè)帶有簽名boolean intersect(SubSubClassEvent)
的方法boolean intersect(SubClassEvent)
,在 Java 方法覆蓋規(guī)則下,它不會(huì)被視為從其超類中覆蓋該方法。
因此,SubSubClassEvent
是Event
其intersect
方法不將自己的類型作為參數(shù)類型的子類,違反了您的條件。
添加回答
舉報(bào)