繁体   English   中英

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

[英]Can objects have instance variables declared in constructor?

我想要这个的原因

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

例如在2D项下的类应该由从3D项目不同depth的实例变量,因为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. 如果是二维框,getDepth()将返回0对吗? 实例类型int变量的默认值。

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

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

  2. 不,你不能那样做。

  3. 是的,因为int的值默认为0 ,所以它将返回0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM