如果抽象超类具有仅定义初始字段参数的构造函数,并且其中一个子类在其初始化中不使用其中一个字段参数,那么我可以简单地将“null”放在未使用的字段参数所在的位置。超级()电话?
为了更清楚地说明这一点,这是一个例子:
public abstract class SuperClass {
protected int xPos;
protected int yPos;
protected int zPos;
public SuperClass(int xPos, int yPos, int zPos) {
this.xPos = xPos;
this.yPos = yPos;
this.zPos = zPos;
}
... getters & setters, etc.
}
public class SubClass extends SuperClass {
public SubClass(int xPos, int yPos) {
super(xPos, yPos, null);
}
}
这可以接受吗?这是良好的编码实践吗?或者让多个构造函数接受不同类型的参数更好?
答案 0 :(得分:4)
您无法将null
指定给int类型。
我建议有几个构造函数。通过这种方式,您可以控制类中的“未初始化”参数,从而简化维护和可读性
答案 1 :(得分:3)
由于这是一个原语(int
),因此您无法将其设置为null
。
此外,必须做这样的事情是一般的糟糕设计“气味”。如果子类不需要超类的某些功能,那么很有可能在这里反转层次结构。子类应该是其父级的所有内容,而且应该更多。
似乎子类应该真的是超类,反之亦然,至少在你列出的例子中是这样。
答案 2 :(得分:0)
如果是原始类型,则设置为ZERO
。您无法设置为null