Re: [問題] 建構子和this super的問題

看板java作者 (Alien)時間18年前 (2007/07/20 19:41), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《ccricky@kkcity.com.tw ( )》之銘言: : ※ 引述《ace113.bbs@ptt.cc (艾德華)》之銘言: : > 新手發問,請指教@@ : > 想請問一下在繼承時的建構子裡面,如果子類別的建構子中有 : > 出現this或是super是不是執行的順序會先是super(或this) : ===>一個建構子的第一行,一定是this或是super(如果user沒設,預設是super(); : ),所以一定會先執行this 或是super 錯. 見下面 : > 然後才是父類別的建構子? : ====>會不會呼叫到父類別的建構子,要看你是寫了this還是super 錯. 無論如何, parent class 的 constructor 是會先跑的. 就算跑別另一個 constructor, 最先跑的還是parent class 的 constructor : > 也就是說順序是->子類別建構子->先執行父類別建構子(當有this時先執行) : > ->然後才是子類別建構子內容 : ===>當你寫了this時,是指呼叫這個子類別的另一個建構元(看是否有傳參數) : ,super()才是呼叫父類別的建構子 但你 invoke 的另一個 constructor, 最先還是會 invoke parent class 的 constructor. : > 例如 : > class A{ : > A(){ : > .... : > } : > } //不管是否帶參數的建構子 : > class B extends A{ : > B(){ : > this('a'); //先執行這行,才執行建構子A()? : > } : > } : > public class Extends1{ : > public static void man(String[] args){ : > B b=new B(); : > } : > } : > 不知道看不看的懂我的問題.感謝ORZ : ===>以上的程式,是會編譯錯誤的,當你呼叫了B(),執行到 this('a'),是指呼叫 : B類別裡的另一個建構子,而它的參數是字元,如果你在B類別裡加上 : B(char x){super();},編譯才會成功 加上 B(char x) {} 就行了, 不需 super() 也行. 因為 default 是會幫你 invoke super 的 no-arg constructor 的. Alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.22.246.26
文章代碼(AID): #16e9-2J- (java)
文章代碼(AID): #16e9-2J- (java)