我先把題目貼出來,一點都不懂的就看我對照這幾個題講解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();都會優先實作父類的無參構造
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()是個啥
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)