我们有两个类(class)(一个 parent 和一个 child )。两者都使用私有(private)变量来存储值,但父级不应提供 setter(x 和 y 由构造函数提供,它们是某种不可变的)。 B 应该用 x 和 y 的 setter 扩展 A。有通用的方法吗?
class A{
private int x;
private int y;
A(int x, int y){
this.x = x;
this.y = y;
}
}
class B extends A{
public void setx(int x){
this.x = x;
}
//same for y
}
一些想法
- 变量应该是私有(private)的
- 父级的 x 和 y 必须是不可变的
- B 必须提供一个 public setter
最佳答案
如果你希望变量是不可变的那么它应该是
class B extends A{
public B(int x, int y){
super(x, y);
}
}
目前,您在 A 中的 x 和 y 变量不是不可变的。要使它们不可变,请在它们前面加上 final
这是您可以分配 x 和 y 的唯一方法,因为它们是私有(private)的。如果你想要 setter ,那么你必须使变量受到保护。
就我个人而言,我是不可变性的忠实拥护者,所以我会这样做而不是 setter - 创建对象通常非常便宜。
关于Java 继承 - setter 仅在子类型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13359244/