所謂繼承,是指類別物件的資源可以延伸和重複使用,在程式中可以利用 extends 來實作繼承關係。
在JAVA中只允許單一繼承(Single Inheritance),也就是說子類別同時只能繼承一個父類別。
範例 :
class Son extends Father{ }
繼承的UML結構圖
class Father{ public int money=100; public void getMoney(){ System.out.println("我有:"+money); } } public class Son extends Father{ public static void main(String[] args) { Son son = new Son(); son.getMoney(); System.out.println("son.money="+son.money); } }
執行結果 :
我有:100
son.money=100
繼承關係下的建構子:
類別 Father 和 Son 在編譯的時候會產生預設建構子,所以必須看成 :
class Father{ Father(){ } } class Son{ Son(){ } }
但是Son 類別繼承Father 類別,所以在預設javac會在Son(){ }建構子中的第一行加入無帶入參數的 super(),也就是呼叫富類別Father 的預設建構子,所以Son 類別應該看成 :
public class Son extends Father{ Son(){ super(); //呼叫父類別中的建構子 } }
super() 是什麼?
假設父類別是帶有參數的建構子,而又忘了在子類別建構子最前面加入 super()
程式範例 :
class Father{ String my_son_Name; Father(String name){//此父類別建構子需要傳入 字串參數 my_son_Name = name; } public void getName(){ System.out.println("我兒子叫做:"+my_son_Name); } } public class Son extends Father{ Son(){ } public static void main(String[] args) { Son son = new Son(); son.getName(); } }
如上述,如果沒有在子類別建構子中加入super() ,會出現以下錯誤 :
E:\JAVA 自我練習\Son.java:21: cannot find symbol symbol : constructor Father() location: class Father Son(){ ^ 1 error Process completed.
成上述條件,想要修這這樣的問題,只需要在子類別的建構子中加入super("字串") 即可 :
class Father{ String my_son_Name; Father(String name){ my_son_Name = name; } public void getName(){ System.out.println("我兒子叫做:"+my_son_Name); } } public class Son extends Father{ Son(){ super("Andy"); } public static void main(String[] args) { Son son = new Son(); son.getName(); } }
執行結果 :
我的兒子叫做:Andythis() 是什麼?
this 可以參考到目前使用該物件的屬性、方法、以及建構子,不過 this 只能用用在方法或建構子中。
※this( ) 和 super( ) 必須存在於建構子的第1行,且不能同時存在。
※this( ) 和 super( ) 也不能存在於static成員的程式中實作。
沒有留言:
張貼留言