Java构造函数中的可覆盖调用

K.S*_*eff 5 java methods constructor encapsulation overriding

我知道从Java中的对象构造函数调用可覆盖的方法是一种糟糕的(安全性)实践.但是,例如,如果构造函数必须初始化某些数据,则调用相应的setter方法似乎是合理的,这样我就不会复制代码.安装者是公开的,而不是最终的.是否有任何标准的处理方法,如声明私有的setter方法,公共方法调用?为了说明,这里有一些代码:

class A {
    private double x,y;
    private privateSetX(double x1) { x=x1; }
    private privateSetY(double y1) { y=y1; }
    public A() { privateSetX(0); privateSetY(0); }
    public setX(double x1) { privateSetX(x1); }
    public setY(double y1) { privateSetY(y1); }
};
Run Code Online (Sandbox Code Playgroud)

Nat*_*yan 2

如果您确实想这样做,请创建一个由构造函数和公共 setter 都调用的辅助私有 setter 方法。