【发布时间】:2011-08-31 13:09:04
【问题描述】:
我知道从 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); }
};
【问题讨论】:
-
大概在这种情况下,您无论如何都不想覆盖设置器?在这种情况下,它们应该被声明为
final。 -
Oli 真的一针见血。它引出了一个问题,即您是否应该拥有公共设置器,但只有私有设置器并具有公共的外部交互行为(你知道,当
A类去和“A-ify things”或其他任何事情时)调用二传手。 -
@Oli 好吧,所以碰巧这个类足够通用,我希望它可以被子类化并且方法 - 可覆盖,所以我没有制作 setter @987654324 @
标签: java methods constructor overriding encapsulation