在學習繼承的時候,遇到一些小問題,這裡總結一下,有錯誤望指正:
先來看一段**:
//標準父類
class father
//有參
public father(string name,int age)
//set&get方法
public void setname(string name)
public string getname()
public void setage(int age)
public int getage() }
//子類
class son extends father
//測試類
public class test
}
建立子類物件,呼叫空參構造,用set方法賦值,用get方法獲值是完全沒有問題的,因為子類繼承父類的時候,若子類中沒有任何成員時,子類只能通過無參構造對成員變數進行初始化,
然後通過set方法賦值.(注意:這裡子類在通過無參構造初始化之前會先預設呼叫父類的無參構造對父類成員進行初始化)
但子類若想使用有參構造對成員變數進行初始化:
//測試類
public class test
}
上面通過son s = new son("張三",20);有參構造對子類成員進行初始化會出現編譯錯誤,因為子類中沒有定義有參構造,而且子類不會繼承父類的有參構造.那如果我們想用有參構造
該怎麼辦呢? 那我們只能在子類中手動寫出有參構造:
//子類
class son
public son(string name,int age)
} //測試類
class test
像上面這樣寫的話有會出現問題了,我們會發現'this.' 並不能對父類成員進行訪問,因為父類成員變數是私有的,所以用set方法進行訪問:
//子類
class son
public son(string name,int age)
}
而如果父類中只有參構造而沒有無參構造時,在子類中必須對父類的有參構造進行顯式呼叫,因為子類成員初始化之前會對父類成員進行初始化. 也就是說,若子類構造第一行**沒有呼叫父類構造,也沒有呼叫子類構造,則預設呼叫父類無參構造,但父類中若沒有無參構造,那只能在子類中顯式呼叫出來,不然,父類成員變數無法進行初始化,子類無法使用.
子類的構造方法必須繼承父類的構造方法
public class person public person string name public class athletes extends person person類定義了乙個有參的構造方法,athletes類中會報錯,解決辦法是person類中加乙個無參的構造方法 父類寫了有參建構函...
子類繼承父類時建構函式的相關問題
子類物件中包含乙個父類物件在子類物件在建立過程中,先呼叫父類構造方法 先建立出內建的父類物件 然後再建立出自己的物件。所以子類構造時,會先呼叫父類的構造方法,如果你在子類構造方法中不顯示指明呼叫父類的哪個構造方法,系統會給你預設加上super 這時父類必須有乙個無參的構造方法,不然會報錯。其實咋寫都...
子類繼承和呼叫父類的構造方法
1.如果子類沒有定義構造方法,則呼叫父類的無引數的構造方法,2.如果子類定義了構造方法,不論是無引數還是帶引數,在建立子類的物件的時候,首先執行父類無引數的構造方法,然後執行自己的構造方法。3.如果子類呼叫父類帶引數的構造方法,可以通過super 引數 呼叫所需要的父類的構造方法,切該語句做為子類構...