仅在继承或大多数情况下是真的吗?
public class MyClass {
public int id;
public MyClass() {
// Some stuff
setId(5);
}
public setId(int id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
这是真的.
因为setter总是public方法.如果你上课不是final那么有外来方法调用的问题.这不是线程安全的,即它被称为逃避this引用.所以从构造函数中,如果你调用一个方法,它应该是final或private.否则safe initialization对象就不会发生这会导致在实际系统中的许多错误.
除了上面的内容之外,我们永远不应该public从中调用方法,constructor因为如果类用于继承,那么构造函数不能直接或间接地调用可覆盖的方法.
如果违反此规则,将导致程序失败.超类构造函数在子类构造函数之前运行,因此在子类构造函数运行之前将调用子类中的重写方法.如果重写方法依赖于子类构造函数执行的任何初始化,则该方法将不会按预期运行.
来源.