对象是否可以在构造函数中声明实例变量?

时间:2014-11-28 12:12:16

标签: java instance-variables

我想要这个

的原因

这一定是一个愚蠢的问题,但我想知道这个问题,因为有时当我创建一个特定类的对象时,我并不总是希望该对象拥有所有的实例变量,因为它们不会被使用。这让我想一想,如果构造函数可以成为为这些情况创建实例变量的好地方,有时某个特定类的对象应该只有一个额外的实例变量 。如果那是可能的话。在下面的情况下,它将是实例变量depth,但在其他情况下,它可能不那么重要。

例如,在2d项下面的类应该与depth实例变量的3d项不同,因为2d项没有任何深度:

class Box {
int width, height, depth, surface;

    public Box(int width, int height) { //2d box
        this.width = width;
        this.height = height;
        surface = width*height;
    }

    public Box(int width, int height, int depth) { //3d box
        this.width = width;
        this.height = height;
        this.depth = depth;
        surface = width*height*depth;
    }

    public getDepth() {
        return this.depth;
    }
}

问题

  1. 我在这里使用错误的课程吗?您是否需要创建一个Surface类,它具有2d框和3d框的不同子类,因此您永远不会发生对象的未使用的实例变量?为对象提供未使用的实例变量是不好的做法吗?
  2. 我的第二个问题是你可以在构造函数中创建一个实例变量吗? (这听起来像一个愚蠢的东西,根本不可能,但有时我只是想100%确定,如果这是可能的。)
  3. 如果是2d框,getDepth()会返回0对吗?实例类型int变量的默认值。

1 个答案:

答案 0 :(得分:1)

您已经自己回答了所有问题。

  1. 使用包含高度和宽度的基类,如Shape。然后2DShape和3DShape扩展Shape类并定义自己的实例变量。 Shape类也可以使用抽象方法来定义区域,体积等。

  2. 不,你做不到。

  3. 是的,由于int的值默认为0,因此会返回0