繼承和多型之動手動腦
阿新 • • 發佈:2018-11-04
1.
package cs4; class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); } public Grandparent(String string) { System.out.println("GrandParent Created.String:" + string); } } class Parent extends Grandparent {public Parent() { //super("Hello.Grandparent."); System.out.println("Parent Created"); //super("Hello.Grandparent."); } public Parent(String string) { super("孫子們好!"); System.out.println("Parent Created.String:"+string); } } classChild extends Parent { public Child() { // super("兒子們好!"); System.out.println("Child Created"); // super("兒子們好!"); } } public class TestInherits { public static void main(String args[]) { Child c = new Child(); } }
當呼叫超類時,如果程式碼不是第一行,則會報錯,原因是先有基類,再生成子類,其次構造方法的作用是物件的初始化,所以必須先初始化基類,才能初始化子類。
所以得到結論,在子類的構造方法呼叫超類時,呼叫語句必須放在子類構造方法類的第一行
2.
package cs4; class A{ } public class ExplorationJDKSource { public static void main(String[] args) { System.out.println(new A()); } }
直接輸出類的物件時,由於我沒有覆蓋toString這個方法,所以繼承object裡面的方法,所以輸出結果是
類名[email protected]+隨機字元
3.在子類中,若要呼叫父類中被覆蓋的方法,可以使用super關鍵字
package cs4; public class Fruit { public String toString() { return "Fruit toString."; } public String FathertoString() { return super.toString(); } public static void main(String args[]) { Fruit f=new Fruit(); System.out.println("f="+f); // System.out.println("f="+f.toString()); System.out.println(f.FathertoString()); } }