我想在子类中声明一个不能被子类覆盖的公共方法。
声明此方法是公共决赛是否干净?
答案 0 :(得分:0)
关于尽可能干净。最终的Modifier声明该方法或变量不能被子类化。
来自维基百科
*
最后一堂课不能被分类。这样做可以带来安全性和安全性 效率的好处,所以很多Java标准库类都是 final,例如java.lang.System和java.lang.String。 a中的所有方法 最后一堂课是隐含的最终决定。
*
http://en.wikipedia.org/wiki/Final_%28Java%29
一般来说,最好避免使用final,因为你可能会怀疑对象不会保持不变。
答案 1 :(得分:-1)
有合理的理由想要一个方法最终。基础对象引用也可以指向派生类实例。因此,如果方法获得Base类引用,它实际上可能指向DerivedFromBase对象。
int SomeMethod(Base aBase)
{
...
double value = aBase.Calculate(a,b,c);
...
}
如果派生类重写了Calculate方法,使其操作方式与Base的方式不同,则可能导致SomeMethod行为不正确,因为它被编写为期望Calculate的行为与Base实现它的方式相同。
使Calculate方法最终确保派生类不会改变Calculate方法的行为,这确保SomeMethod的行为相同,无论它是传递Base对象还是从Base派生的任何对象。