English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

class A
{
int num;
public A(int num)
{
this.num=num;
}
public void setNum(int num)
{
this.num=num;
}
public int print()
{
return num;
}
}
class B extends A
{
public B(int num)
{
super(num); //原本是 setNum(num);
}
public static void main(String[] args)
{
B b=new B(1);
System.out.println(b.print());
}
}
這是我在某的地方看到的問題~但是那邊並沒有詳細說明~(可能是我看不懂)
我想問為什麼不能用 setNum(num);
B不是有繼承A的全部,那應該是可以的阿!!
(我是初學者,對繼承觀念不太懂)

2006-07-17 16:10:04 · 2 個解答 · 發問者 ANDY 2 in 電腦與網際網路 程式設計

我後來又再 class A 那邊加了
public A()
{
}
就可以使用 setNum(num);
為什麼加了這個就可以用了,難道一定要有個無參數的建構子嗎?

2006-07-17 16:20:10 · update #1

TO 小神
你有沒有說錯阿!!??
跟類別同名稱的才叫 建構子
而 setNum 這才是方法吧!!!

2006-07-17 16:54:04 · update #2

2 個解答

1. 預設建構子會自動產生, 但前提是類別裡沒有其他的自設建構子
public A(int num)
{
this.num=num;
}
你的 A 類別裡已經有上面那個你自己建立的建構子, 所以預設建構子不會自動產生, 你得手動加上

2. 在 B 的建構子裡, 如果沒有呼叫父類別的建構子, 則會自動呼叫父類別的預設建構子, 所以
public B(int num)
{
setNum(num);
}
其實會自動變成這樣
public B(int num)
{
super();
setNum(num);
}
但是原來的 A 類別裡沒有 "預設建構子", 所以程式編譯會出錯
後來你在 A 類別裡加上了 "預設建構子", 就是正解囉....^^"

2006-07-18 18:21:36 · answer #1 · answered by 兔子 2 · 0 0

*觀念*
依題 , A是父類別 ,B是子類別
子類別可繼承父類別內的"資料(DATA)"和"方法(METHOD),但是"無法繼承父類別中的建構子" 所以一開始的程式無法用 setNum(num),因為是建構子。
然而,加入public A() { } 這是一個"方法",所以B當然可以繼承到囉。

2006-07-17 21:02:43 補充:
建構子要用super這個關鍵字去繼承~

2006-07-18 01:11:12 補充:
這麼晚回你不好意思,剛到家(累)。有2個地方打錯,不好意思~感謝您的提醒。1.跟類別同名稱的稱為建構子。2.還有(public) A() { } 是預設建構子(Default Constructor)才對。以上是我更正的部份類別裡面一定要有建構子,所以在撰寫類別時要定義該類別的建構子。所以要用SUPER去指向父類別的"建構子"(也可以指向"屬性和方法")

2006-07-18 01:12:11 補充:
B是有繼承A,問題是在程式中下列敘述是建構子public a(int num){ this.num=num; }B沒繼承到,因為無法繼承到建構子 ,所以要用"SUPER"關鍵字。若用 setNum(num)的話,加上A() { } 在編譯時期找到預設的建構子,(因為無法繼承到父類別的建構子)所以才這樣寫。不然會出現錯誤訊息cannot find symbol constructor a( )

2006-07-17 16:45:53 · answer #2 · answered by 小神 1 · 0 0

fedest.com, questions and answers