如何覆盖不是为扩展而设计的方法

时间:2014-08-19 05:40:20

标签: java checkstyle

以下是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"
    } 
}

1 个答案:

答案 0 :(得分:1)

如果C中的m()是最终版,则无法覆盖它。由于C类是从接口I实现的,因此它具有来实现所有我的方法,这就是设计接口契约的方式。
请注意,C不知道SC。因此,您应该删除C中的final并在C中实现m()。实现可能甚至是空白的,具体取决于C应该执行的任务类型。从SC中的C覆盖现有方法(m())没有问题。