我是Java新手,我试图从Oracle网站上的教程中理解以下内容:http : //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
于private
不够好。Employee.init
仍然有效,但是会产生阴影 Person.init
,这将非常容易引起误解。最好制造Person.init
final
,禁止制造Employee.init
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句