在java中声明一个公共final方法是不好的

时间:2014-12-12 01:56:57

标签: java

我想在子类中声明一个不能被子类覆盖的公共方法。

声明此方法是公共决赛是否干净?

2 个答案:

答案 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派生的任何对象。