天天看點

super與構造方法

我先把題目貼出來,一點都不懂的就看我對照這幾個題講解super再聯系後面的習題

class Super {
    public Super() {
        System.out.println("Super()");
    }

    public Super(String str) {
        System.out.println("Super(String)");
    }
}

public class Sub extends Super {

    public Sub() {
        super();
        System.out.println("Sub()");
    }

    public Sub(int i) {
        this();
        System.out.println("Sub(int)");
    }

    public Sub(String str) {
        super(str);
        System.out.println("Sub(String)");
    }

    public static void main(String[] args) {
        Sub s1 = new Sub();
        Sub s2 = new Sub(10);
        Sub s3 = new Sub("hello");
    }
}
           

不要說我不寫測試類哇,我這個是為了友善

super與構造方法

首先子類繼承父類

子類繼承父類的話會先實作父類的構造方法!!!及時不寫super();都會優先實作父類的無參構造

Sub s1 = new Sub();當讀到這一條時應該先實作Super的無參構造

System.out.println(“Super()”);

再實作Sub的無參構造

System.out.println(“Sub()”);

Sub s2 = new Sub(10);中有一個int類型的參數

那我們回過頭去找找

public Sub(int i) {
        this();
        System.out.println("Sub(int)");
    }
           

大家可能有問題這個this()是個啥

super與構造方法

this() 大家看裡面是沒東西的,那麼他指的是子類的還是父類的呢?

他這裡的this()應該指的是就近的無參構造就是Sub()

!!!那麼調用了Sub()那就要實作Sub()的父類無參構造不然沒有爸爸哪來的兒子

就把無參構造又走了一遍答案就是

System.out.println(“Super()”);

System.out.println(“Sub()”);

再看到 Sub s2 = new Sub(10);他父類沒有int 參數的方法那就直接執行呗

System.out.println(“Sub(int)”);

最後:

**Sub s3 = new Sub(“hello”);**子類和父類中都有String類型的就有是先執行父類構造方法再執行子類構造方法咯

System.out.println(“Super(String)”);

System.out.println(“Sub(String)”);

是以最後答案顯而易見咯

//Super()

//Sub()

//Super()

//Sub()

//Sub(int)

//Super(String)

//Sub(String)