对超级参数使用null

时间:2012-09-19 20:34:06

标签: java

如果抽象超类具有仅定义初始字段参数的构造函数,并且其中一个子类在其初始化中不使用其中一个字段参数,那么我可以简单地将“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);
    }
}

这可以接受吗?这是良好的编码实践吗?或者让多个构造函数接受不同类型的参数更好?

3 个答案:

答案 0 :(得分:4)

您无法将null指定给int类型。

我建议有几个构造函数。通过这种方式,您可以控制类中的“未初始化”参数,从而简化维护和可读性

答案 1 :(得分:3)

由于这是一个原语(int),因此您无法将其设置为null

此外,必须做这样的事情是一般的糟糕设计“气味”。如果子类不需要超类的某些功能,那么很有可能在这里反转层次结构。子类应该是其父级的所有内容,而且应该更多。

似乎子类应该真的是超类,反之亦然,至少在你列出的例子中是这样。

答案 2 :(得分:0)

如果是原始类型,则设置为ZERO。您无法设置为null