所以假设我有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 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; } }