所以假设我有A类,它的定义如下:
public class A{
private int x;
public A(){
this(13);
}
public A(int x){
this.x = x;
}
}
然后我有一个需要实现y的B类,所以像这样:
public class B extends A{
private int y;
public B(){
}
public B(int x){
this(x, 0);
}
public B(int x, int y){
super(x);
this.y = y;
}
}
我的问题是:我在公共B()做什么?我是否调用super()以便A分配默认值/执行任何操作,然后在该构造函数中执行另一个this.y = y,或者我将其调用(13)?
这两种方法似乎都需要一些不好的做法.一个人让我在两个地方写这个.y = y.另一个要求我重复默认值,每次更改默认值时都需要更改.
最佳答案 如果字段不是最终字段,则可以在声明它们的位置分配默认值.所以代码看起来像:
class A{
private int x = 13;
public A(){
//use default value for x
}
public A(int x){
this.x = x;
}
}
class B extends A {
private int y = 0;
public B(){
//use default value for x and y
}
public B(int x){
super(x);
//use default value for y
}
public B(int x, int y){
super(x);
this.y = y;
}
}