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

时间:2016-10-27 12:36:37

标签: java android inheritance

在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);

但是我在这里添加了最后一个关键字。

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

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

1 个答案:

答案 0 :(得分:2)

是的,从技术上讲,它是一个干净的解决方案。如果您完全确定没有人可能想要更改此特定方法中的任何逻辑,您可以这样做。

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