代码之家  ›  专栏  ›  技术社区  ›  Rohit Kumar

扩展类时构造函数出错

  •  0
  • Rohit Kumar  · 技术社区  · 6 年前

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

    4 回复  |  直到 6 年前
        1
  •  1
  •   Mustafa Çil    6 年前

    首先创建子对象时,父构造函数起作用。在本例中,创建矩形框对象时,首先矩形构造函数工作,然后矩形框构造函数工作。因此,您的子构造函数必须调用父构造函数。

    通常,如果父类和子类都有默认构造函数,则子默认构造函数调用父默认构造函数。但是您没有默认构造函数,因为这个矩形盒构造函数必须调用矩形构造函数。对于调用父构造函数,您必须使用 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
  •  1
  •   Stultuske    6 年前
    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;    
        }
    
        3
  •  0
  •   Mr. Skip    6 年前

    您确实需要首先调用一个超类的构造函数:

    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);
    }
    }
    
        4
  •  0
  •   ertenfth    6 年前

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

    您可以使用该标题搜索详细信息。

    如果一个类从另一个类继承任何属性,则子类必须调用其父类构造函数。如果父级的类构造函数没有参数,java将自己调用它,则无需执行任何操作。但在您的示例中,Rectangle类具有参数为“width”和“height”的构造函数。因此,在为子类编写构造函数时,首先需要调用父类。当您想调用超类的参数化构造函数时,需要使用super关键字,如下所示。

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