1. 程式人生 > >繼承和多型之動手動腦

繼承和多型之動手動腦

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); } } class
Child 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());
    }
}