Discussion:
Constructor與class的繼承
(时间太久无法回复)
喔帥
2006-07-06 07:12:20 UTC
Permalink
我想請教一個問題,如果母類別沒有no args的constructor,如下

class A{
A (String s){}
}

他的子類別 class B extends A ,理論上不會有default constructor
必須自己定義,是這樣子嗎? 如果是話,假設我自己定義一個constructor如下

class B extends A{
B() {}
}

這樣子似乎是無法compile,因為沒有super()存在,不過這樣就可以

B(){ super(new String());}

,那麼我想請問的是,在B的建構子中,如果不自己寫的話,有辦法去呼叫A的建構子嗎?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.64.83.221
大口小口吃炒飯
2006-07-06 09:07:13 UTC
Permalink
※ 引述《oishii (喔帥)》之銘言:
: 我想請教一個問題,如果母類別沒有no args的constructor,如下
: class A{
: A (String s){}
: }
: 他的子類別 class B extends A ,理論上不會有default constructor
: 必須自己定義,是這樣子嗎? 如果是話,假設我自己定義一個constructor如下
: class B extends A{
: B() {}
: }
: 這樣子似乎是無法compile,因為沒有super()存在,不過這樣就可以
: B(){ super(new String());}
: ,那麼我想請問的是,在B的建構子中,如果不自己寫的話,有辦法去呼叫A的建構子嗎?

除了沒有參數的constructor可以被自動呼叫 (會偷偷被加在第一行)

其他應該是沒有方法可以自動呼叫,想想看,不由你指定,它應該用什麼當作參數丟給

constructor呢? 沒得知吧? 呵呵...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.81.235.78
..
2006-07-07 00:34:42 UTC
Permalink
※ 引述《oishii (喔帥)》之銘言:
: 我想請教一個問題,如果母類別沒有no args的constructor,如下
: class A{
: A (String s){}
: }
: 他的子類別 class B extends A ,理論上不會有default constructor
: 必須自己定義,是這樣子嗎? 如果是話,假設我自己定義一個constructor如下
class B是有default constructor的...default constructor 只要在你沒自行定義
constructor時,就會產生,而你這裡的問題在於,父類別的建構子是有引數的,
而在class B的建構子中(不論是default或是user define)並沒有輸入一個符合父類
別建構子引數的super()呼叫,因為,每個建構子的第一行都會呼叫super(),沒打的
話會以預設的super()也就是沒有引數的,因為在你的問題中你的父類別的建構子是
有引數的,所以compile會出現錯誤
: class B extends A{
: B() {}
: }
: 這樣子似乎是無法compile,因為沒有super()存在,不過這樣就可以
: B(){ super(new String());}
: ,那麼我想請問的是,在B的建構子中,如果不自己寫的話,有辦法去呼叫A的建構子嗎?

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.39.173.66

Loading...