super认为自己不是第一个构造函数的语句

Super thinks it is not the first constructor in a statement

我似乎无法让这段代码工作。我列出了几个不同的 类,它们相互延伸。然而,box super 的代码往往不认为它是第一个构造函数。

 public class Rectangle3
 {
// instance variables 
private int length;
private int width;

/**
 * Constructor for objects of class rectangle
 */
public void Rectangle(int l, int w)
{
    // initialise instance variables
    length = l;
    width = w;
}

// return the height
public int getLength()
{
    return length;
}
public int getWidth()
{
    return width;
}

}

然后下一个

 public class Box3 extends Rectangle3
{
// instance variables 
private int height;

/**
 * Constructor for objects of class box
 */
public void Box(int l, int w, int h)
{
    // call superclass
    super (l, w);
    // initialise instance variables
    height = h;
}

// return the height
public int getHeight()
{
    return height;
}

}

然后立方体...

public class Cube3 extends Box3
{
   //instance variable
private int depth;

/**
 * Cube constructor class
 */   
    public void Cube(int l, int w, int h, int d)
   {
   //super call
   super(l, w, h);
   //initialization of instance variable
   depth = d;
}

//return call to depth
public int getDepth()
{
    return depth;
}

}

public void Box(int l, int w, int h)

如果您将该行更改为

,我确定您的代码可以正常工作
public Box3(int l, int w, int h)

您的代码没有定义构造函数。 方法 public void Box(int l, int w, int h) 不是Box3 class 的构造函数,因此使用super(..) 是无效的。 public void Cube(int l, int w, int h, int d)public void Rectangle(int l, int w)

方法也是如此

相反,您需要在 Box3:

中定义一个构造函数
public Box3(int l, int w, int h) {
    // call superclass
    super (l, w);
    // initialise instance variables
    height = h;
}

请注意缺少 void 并且它的名称与 class 名称相同。

注意上面的构造函数将不起作用,因为Rectangle3没有这个构造函数。所以对于 Rectangle3 你需要使用:

public Rectangle3(int l, int w) {
    // initialise instance variables
    length = l;
    width = w;
}

Cube3也是如此:

public Cube3(int l, int w, int h, int d) {
    //super call
    super(l, w, h);
    //initialization of instance variable
    depth = d;
}

另见 Java Tutorial "Providing Constructors for Your Classes"