扩展 class 时构造函数出错
Error on constructor while extending class
我是 java 的初学者,在编码过程中,我遇到了一个对我来说不太容易理解的问题。我的问题是 "Write a class with a method to find the area of a rectangle. Create a subclass to find the volume of a rectangular shaped box." 我面临的错误如下。我为此编写了这段代码:-
class Rectangle
{
public int w;
public int h;
public Rectangle(int width, int height)
{
w=width;
h=height;
}
public void area()
{
int area=w*h;
System.out.println("Area of Rectangle : "+area);
}
}
class RectangleBox extends Rectangle
{
int d;
public RectangleBox(int width, int height, int depth)
{
d=depth;
w=width;
h=height;
}
public void volume()
{
int volume=w*h*d;
System.out.println("Volume of Rectangle : "+volume);
}
}
class programm8
{
public static void main(String args[])
{
Rectangle r = new Rectangle(10,20);
RectangleBox rb = new RectangleBox(4,5,6);
r.area();
rb.volume();
}
}
Error:(23, 5) java: constructor Rectangle in class code.Rectangle
cannot be applied to given types; required: int,int found: no
arguments reason: actual and formal argument lists differ in length
首先需要调用super的构造函数class:
class RectangleBox extends Rectangle
{
int d;
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
}
public void volume()
{
int volume=w*h*d;
System.out.println("Volume of Rectangle : "+volume);
}
}
public RectangleBox(int width, int height, int depth)
{
d=depth;
w=width;
h=height;
}
这个构造函数做的第一件事就是用相同的参数调用父 class 的构造函数(除非你特别告诉你的构造函数调用另一个),这将是:
public Rectangle(int width, int height, int depth)
{
w=width;
h=height;
}
此构造函数不存在。您需要使用适当的参数手动调用父构造函数,如下所示:
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
}
当您首先创建子对象时,父构造函数起作用。在这个例子中,当你创建一个 RectangleBox 对象时,首先 Rectangle 构造函数在 RectangleBox 构造函数工作之后工作。因此,您的子构造函数必须调用父构造函数。
通常情况下,如果您有父子默认构造函数类,子默认构造函数会调用父默认构造函数。但是您没有默认构造函数,因为此 RectangleBox 构造函数必须调用 Rectangle 构造函数。要调用父构造函数,您必须使用 super
关键字。
然后你的代码:
public Rectangle(int width, int height)
{
w=width;
h=height;
}
public RectangleBox(int width, int height, int depth)
{
super(width, width)
h=height;
}
您的错误与主题有关;调用超级class构造函数
您可以使用该标题搜索详细信息。
如果 class 从另一个 class 继承任何属性,子 class 必须调用其 parent class 构造函数。如果 parent 的 class 构造函数没有参数 java 会自行调用它,您无需执行任何操作。但在您的情况下,Rectangle class 具有带参数 "width" 和 "height" 的构造函数。因此,当您为 subclass 编写构造函数时,您需要做的第一件事就是调用 parent class'。当要调用superclass的参数化构造函数时,需要使用super关键字,如下所示。
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
w=width;
h=height;
}
我是 java 的初学者,在编码过程中,我遇到了一个对我来说不太容易理解的问题。我的问题是 "Write a class with a method to find the area of a rectangle. Create a subclass to find the volume of a rectangular shaped box." 我面临的错误如下。我为此编写了这段代码:-
class Rectangle
{
public int w;
public int h;
public Rectangle(int width, int height)
{
w=width;
h=height;
}
public void area()
{
int area=w*h;
System.out.println("Area of Rectangle : "+area);
}
}
class RectangleBox extends Rectangle
{
int d;
public RectangleBox(int width, int height, int depth)
{
d=depth;
w=width;
h=height;
}
public void volume()
{
int volume=w*h*d;
System.out.println("Volume of Rectangle : "+volume);
}
}
class programm8
{
public static void main(String args[])
{
Rectangle r = new Rectangle(10,20);
RectangleBox rb = new RectangleBox(4,5,6);
r.area();
rb.volume();
}
}
Error:(23, 5) java: constructor Rectangle in class code.Rectangle cannot be applied to given types; required: int,int found: no arguments reason: actual and formal argument lists differ in length
首先需要调用super的构造函数class:
class RectangleBox extends Rectangle
{
int d;
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
}
public void volume()
{
int volume=w*h*d;
System.out.println("Volume of Rectangle : "+volume);
}
}
public RectangleBox(int width, int height, int depth)
{
d=depth;
w=width;
h=height;
}
这个构造函数做的第一件事就是用相同的参数调用父 class 的构造函数(除非你特别告诉你的构造函数调用另一个),这将是:
public Rectangle(int width, int height, int depth)
{
w=width;
h=height;
}
此构造函数不存在。您需要使用适当的参数手动调用父构造函数,如下所示:
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
}
当您首先创建子对象时,父构造函数起作用。在这个例子中,当你创建一个 RectangleBox 对象时,首先 Rectangle 构造函数在 RectangleBox 构造函数工作之后工作。因此,您的子构造函数必须调用父构造函数。
通常情况下,如果您有父子默认构造函数类,子默认构造函数会调用父默认构造函数。但是您没有默认构造函数,因为此 RectangleBox 构造函数必须调用 Rectangle 构造函数。要调用父构造函数,您必须使用 super
关键字。
然后你的代码:
public Rectangle(int width, int height)
{
w=width;
h=height;
}
public RectangleBox(int width, int height, int depth)
{
super(width, width)
h=height;
}
您的错误与主题有关;调用超级class构造函数
您可以使用该标题搜索详细信息。
如果 class 从另一个 class 继承任何属性,子 class 必须调用其 parent class 构造函数。如果 parent 的 class 构造函数没有参数 java 会自行调用它,您无需执行任何操作。但在您的情况下,Rectangle class 具有带参数 "width" 和 "height" 的构造函数。因此,当您为 subclass 编写构造函数时,您需要做的第一件事就是调用 parent class'。当要调用superclass的参数化构造函数时,需要使用super关键字,如下所示。
public RectangleBox(int width, int height, int depth)
{
super(width, height);
d=depth;
w=width;
h=height;
}