扩展类

时间:2018-03-15 12:44:02

标签: java constructor arguments extend extends

我是java的初学者,在编码过程中,我遇到了一个不容易理解的问题。我的问题是"用一种方法写一个类来查找矩形区域。创建一个子类来查找矩形框的体积。"我面临的错误如下。我为此写了这段代码: -

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();
    }
}
  

错误:(23,5)java:构造函数类code.Rectangle中的Rectangle   不能适用于给定的类型; required:int,int found:no   参数原因:实际和形式参数列表的长度不同

4 个答案:

答案 0 :(得分:1)

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;   

    }

此构造函数不存在。您需要使用适当的参数手动调用父构造函数,如下所示:

public Rectangle(int width, int height, int depth)
    {
        w=width;
        h=height;
    }

答案 1 :(得分:1)

首次创建子对象时,父构造函数可以正常工作。在此示例中,当您创建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;   

    }

答案 2 :(得分:0)

首先需要调用超类的构造函数:

NEW.value := quote_literal(regexp_replace(NEW.value,'[(),\ ]','_','g'));

答案 3 :(得分:0)

您的错误与主题有关;调用超类构造函数

您可以使用该标题进行搜索以获取详细信息。

如果一个类继承了另一个类的任何属性,则子类必须调用其父类构造函数。如果父类的构造函数没有参数,则java会自行调用它,您不必执行任何操作。但在你的情况下,Rectangle类的构造函数的参数为​​“width”和“height”。因此,当您为子类编写构造函数时,首先需要做的是调用父类'。如果要调用超类的参数化构造函数,则需要使用super关键字,如下所示。

 public RectangleBox(int width, int height, int depth)
{   
    super(width, height);
    d=depth;
    w=width;
    h=height;   

}