2 回答
TA贡献1841条经验 获得超3个赞
如果使抽象类泛型,则可以允许子类将自己指定为参数类型:
abstract class Event<T extends Event<T>> {
abstract boolean intersect(T object);
}
子类将能够将它们自己的类型声明为参数。除非您的代码库使用原始类型,否则这应该有效。
class SubClassEvent extends Event<SubClassEvent> {
@Override
boolean intersect(SubClassEvent object){return true;}
}
这个(或者更确切地说是例外)的限制将是原始类型和其他类型事件的事件,这可以允许其他参数类型。
TA贡献1898条经验 获得超8个赞
这在 Java 中是不可能的。考虑您有SubClassEvent
实现方法的子类boolean intersect(SubClassEvent e2)
。然后,如果它有一个进一步的子类SubSubClassEvent extends SubClassEvent
,它将根据继承在 Java 中的工作方式boolean intersect(SubClassEvent e2)
从继承方法SubClassEvent
。
SubSubClassEvent
不必覆盖该方法,因为该方法在其超类中是非抽象的SubSubClass
。但即使SubSubClassEvent
要覆盖该方法,也必须使用签名覆盖它boolean intersect(SubClassEvent)
。如果它实现了一个带有签名boolean intersect(SubSubClassEvent)
的方法boolean intersect(SubClassEvent)
,在 Java 方法覆盖规则下,它不会被视为从其超类中覆盖该方法。
因此,SubSubClassEvent
是Event
其intersect
方法不将自己的类型作为参数类型的子类,违反了您的条件。
添加回答
举报