Re: [問題] 建構子和this super的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):