以下是Java中非常简单的代码。
问题出现在 SC 类中,如评论所示。通过删除 C 类中的最终修饰符可以轻松解决此问题,但它会在 Checkstyle插件中发出警告,说明方法'm'不是为扩展而设计的 - 需要是抽象的,最终的或空的。
我应该遵循哪种最佳设计方法?
public interface I {
public void m();
}
public class C implements I {
@Override
public final void m() {
// some code
}
}
public class SC extends C {
@Override
public final void m(){
// error message saying "Cannot override the final method from C"
}
}
答案 0 :(得分:1)
如果C中的m()
是最终版,则无法覆盖它。由于C类是从接口I实现的,因此它具有来实现所有我的方法,这就是设计接口契约的方式。
请注意,C不知道SC。因此,您应该删除C中的final并在C中实现m()
。实现可能甚至是空白的,具体取决于C应该执行的任务类型。从SC中的C覆盖现有方法(m()
)没有问题。