Java 对象可以在构造函数中声明实例变量吗? 我想要这个的原因

Java 对象可以在构造函数中声明实例变量吗? 我想要这个的原因,java,instance-variables,Java,Instance Variables,这一定是一个愚蠢的问题,但我想知道这个问题,因为有时候当我创建一个特定类的对象时,我并不总是希望该对象拥有所有的实例变量,因为它们不会被使用。这让我想到,如果构造函数是为某些情况创建实例变量的好地方,那么有时候特定类的对象应该有一个额外的实例变量,只有有时候才是。当然,若这是可能的话。在下面的例子中,它将是实例变量depth,但在其他情况下,它可能不那么琐碎 例如,在类中,2d项下的深度应与3d项不同,因为2d项没有任何深度: class Box { int width, height, dep

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

例如,在类中,2d项下的深度应与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;
    }
}
问题
  • 我在这里用错类了吗?您是否需要创建一个曲面类,该类对于二维长方体和三维长方体具有不同的子类,以便永远不会出现对象具有未使用的实例变量的情况?为对象使用未使用的实例变量是一种不好的做法吗
  • 我的第二个问题是,您能否在构造函数中创建一个实例变量,而该实例变量并没有列在类的下面?(这听起来像是一个愚蠢的要求,而且根本不可能,但有时我只是想100%确定这是否可能)
  • 如果是2d框,getDepth()将返回
    0
    对吗?实例类型int变量的默认值
    您已经自己回答了所有问题

  • 使用基类,例如包含高度和宽度的Shape。然后是2DShape和3DShape,它们扩展了Shape类并定义了自己的实例变量。形状类也可以有抽象方法来定义面积、体积等

  • 不,你不能那样做

  • 是,由于
    int
    的值默认为
    0
    ,因此它将返回
    0


  • 根据定义,类是特定实例变量(和函数)的集合。上面的代码没有多大意义;
    surfaceearea
    代表什么?那么,
    surfaceearea::getDepth()
    意味着什么呢?@OliverCharlesworth我试图用一个类来解释我的特殊问题。我想我最好把它命名为box。编辑:我改成了。另一种方法可能是使用
    可选的
    听起来很棒,正是我想要的。我会调查的!这里有一些关于可选类及其用法的很好的解释,然后我还有一个问题要问。在本例中,很明显您可以细分为更具体的子类。但如果这没有意义呢?您是否给该类的每个对象一个很少使用的实例变量?未使用的实例变量有多糟糕?如果创建子类没有意义,那么您的设计就是有缺陷的@您可以创建的Joop。