promotion image of download ymail app
Promoted

抽象類別中加入了建構元,但是執行時會出現Implicit super constructorCShape11_1() is undefined. Must explicitly invoke another constructor的錯誤,想請問哪裡要再修改呢,謝謝回答?

// app11_1

abstract class CShape11_1 // 定義抽象類別CShape

{

protected String color; // 資料成員

public CShape11_1(String str)

{

color=str;

}

public void setColor(String str) // 一般的函數

{

color=str;

}

public abstract void show(); // 抽象函數,只有定義名稱,沒有定義處理方式

}

class CRectangle11_1 extends CShape11_1 // 定義子類別CRectangle

{

protected int width,height;

public CRectangle11_1(String str)

{

super(str); //呼叫抽象類別CShape11_1(String str)建構元

}

public CRectangle11_1(int w,int h)

{

width=w;

height=h;

}

public void show() // 明確定義繼承自抽象類別的show() method

{

System.out.print("color="+color+", ");

System.out.println("area="+width*height);

}

}

class CCircle11_1 extends CShape11_1 // 定義子類別CCircle

{

protected double radius;

public CCircle11_1(String str)

{

super(str); //呼叫抽象類別CShape11_1(String str)建構元

}

public CCircle11_1(double r)

{

radius=r;

}

public void show() // 明確定義繼承自抽象類別的show() method

{

System.out.print("color="+color+", ");

System.out.println("area="+3.14*radius*radius);

}

}

public class app11_1

{

public static void main(String args[])

{

CRectangle11_1 rect=new CRectangle11_1(5,10);

rect.setColor("Yellow");

rect.show();

CCircle11_1 cir=new CCircle11_1(2.0);

cir.setColor("Green");

cir.show();

}

}

1 個解答

評分
  • 阿平
    Lv 4
    4 年前
    最佳解答

    子類別的建構子如果沒有指定呼叫父類別的哪個建構子,則預設呼叫父類別的無引數建構子。

    public CRectangle11_1(int w,int h)

    {

    width=w;

    height=h;

    }

    相當於

    public CRectangle11_1(int w,int h)

    {

    super();

    width=w;

    height=h;

    }

    但是類別CShape11_1中沒有無引數建構子public CShape11_1(){},所以出現錯誤。手動加上無引數建構子即可避免這個錯誤。

    假如類別中一個建構子都沒有,編譯器會自動加上一個無引數建構子當作預設建構子。

還有問題?馬上發問,尋求解答。