0

如果抽象超类有一个只定义初始字段参数的构造函数,并且其中一个子类在其初始化中不使用其中一个字段参数,我可以简单地在 super() 中未使用的字段参数所在的位置放置一个“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);
    }
}

这可以接受吗?这是良好的编码习惯吗?还是让多个构造函数接受不同类型的参数更好?

4

3 回答 3

4

您不能分配null给 int 类型。

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

于 2012-09-19T20:34:56.513 回答
3

因为这是一个原语 ( int),所以您不能将其设置为null

此外,不得不做这样的事情是一种普遍的糟糕设计“气味”。如果子类不需要超类的某些功能,那么这里的层次结构很可能会颠倒过来。子类实际上应该是其父类的一切,甚至更多。

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

于 2012-09-19T21:03:56.187 回答
0

如果是原始类型,则设置为ZERO. 你不能设置为null

于 2012-09-19T20:35:08.080 回答