我是一名 Java 新手,我试图理解 Oracle 网站教程中的以下行:https://docs.oracle.com/javase/tutorial/java/IandI/final.html https://docs.oracle.com/javase/tutorial/java/IandI/final.html
从构造函数调用的方法通常应声明为final。如果构造函数调用非最终方法,子类可能会重新定义该方法,从而产生令人惊讶或不希望的结果。
我尝试多次阅读它,试图理解子类如何重新定义从构造函数调用的方法。我是否应该假设构造函数调用的方法是在构造函数的类中声明的方法?如果一个方法是从构造函数中调用的,为什么要声明为final? (而不是在嵌套类或另一个方法中?)我无法理解该声明。举个例子就太好了。
这是有效的代码(编译):
class Person {
Person() {
init();
}
void init() {
// do stuff
}
}
class Employee extends Person {
Employee() {
super();
}
void init() {
// do something else
}
}
而且非常可疑。因为Person.init
可能会做一些对班级完整性至关重要的事情,并且不能保证Employee.init
也会这么做。
限制Person.init
to private
还不够好。Employee.init
仍然有效,但会shadow Person.init
,这将非常具有误导性。最好是制作Person.init
final
,这使得禁止创建Employee.init
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)