繁体   English   中英

扩展类时构造函数出错

[英]Error on constructor while extending class

我是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:类代码中的构造函数Rectangle。Rectangle无法应用于给定类型; 必需:int,int找到:无参数原因:实际参数和正式参数列表的长度不同

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

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

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

首先创建子对象时,父构造函数起作用。 在此示例中,当您创建RectangleBox对象时,首先在该RectangleBox构造函数起作用之后,Rectangle构造函数起作用。 因此,您的子构造函数必须调用父构造函数。

通常,如果您具有父类和子类的默认构造函数,则子默认构造函数将调用父默认构造函数。 但是您没有默认的构造函数,因为此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 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);
}
}

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

您可以搜索该标题以获取详细信息。

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

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

}

暂无
暂无

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

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