【发布时间】:2019-03-24 16:39:35
【问题描述】:
我有一个接口myIf,我希望它出现在所有继承级别。这个想法是fooEverywhere 需要在GrandParent 和Parent 以及更多的孩子。所以出现了这种明显的模式:
public interface myIf {
void fooEverywhere ();
}
public class GrandParent implements myIf {
@Override
public void fooEverywhere() { /* Actions */ }
}
public class Parent extends GrandParent implements myIf {
@Override
public void fooEverywhere() { super.fooEverywhere(); /* And Other actions */ }
}
但是,如果我像这样忘记/错过Parent:
public class Parent extends GrandParent /*implements myIf*/ {
// @Override
// public void fooEverywhere() { super.fooEverywhere(); /* And Other actions */ }
}
Java,仍然可以,因为 parentObject.fooEverywhere() 会找到 GrandParent.fooEverywhere()。
因此,我如何重新设计它以强制 Java 识别 fooEverywhere 必须在 Parent 中?
【问题讨论】:
-
我不确定你的意图是什么,但抽象类应该可以为你处理这个要求。
-
虽然我喜欢你的问题,但我不明白你的目标是什么。通过扩展 GrandParent,您将隐式实现 myIf。
-
@MarcinKrasowski - 不能保证任何类都是抽象的。
-
斯特凡所说的。 ->
force Java to recognise that fooEverywhere must be in Parent它已经做到了。所有扩展Parent的类都必须实现fooEverywhere(因为Parent提供了一个实现,默认情况下它们会这样做)。 -
那么不要提供默认实现。 (换句话说,不提供实现的抽象类在这里可能会更好。)
标签: java inheritance interface overriding