将final关键字添加到继承/重写方法是否"可以"?

Nik*_*kyD 6 java inheritance android

在Android中,我创建了一个扩展的抽象类View(我无法访问的Android类).抽象类会覆盖视图

@Override
protected final void onDraw(Canvas canvas) {
    if(conditions) return;        

    // child classes should only draw if this class gives the ok
    subDraw(canvas);
}

protected abstract void subDraw(Canvas canvas);
Run Code Online (Sandbox Code Playgroud)

但是我在这里添加了final关键字.

关键是,我创建了一个抽象方法,子类应该使用而不是onDraw.所以我阻止onDraw被任何进一步覆盖,它的工作原理.

我知道有一些设计可以让它变得更好,但是这种设计就像一个没有太多变化的魅力.如果做上述操作在运行时或其他问题上有不必要的副作用,我的问题更为一般?

Bor*_*lev 2

是的,从技术上讲,这是一个干净的解决方案。如果您绝对确定在任何情况下都不会有人想要更改此特定方法内的任何逻辑,您就可以这样做。

另外,您必须记住,此方法必须包含尽可能少的逻辑,因为它不能被任何后代更改。如果您认为此方法的大小会增加(不使用委托),请避免最终确定它。