- super關鍵字
1、關鍵字super可以用於兩種途徑:
調用父類的方法。
調用父類的構造方法。
圖片例子:
2、語法格式:
super.屬性名//訪問父類的屬性
super.方法名(參數);//調用父類的方法。
super(參數);//調用父類的構造方法。
//初始化當前對象的父類型特征
3、super能出現在實例方法和構造方法中,不能使用在靜態方法中。且大部分情況下可以省略。
4、super()只能出現在構造方法第一行,通過當前的構造方法去調用、"父類"中其它的構造方法,目的是:代碼復用(創建子類對象的時候,先初始化父類型特征)。
- 建議手動寫無參構造方法
1、一個類如果沒有手動提供任何構造方法,系統會默認提供一個無參數構造方法。
2、一個類如果手動提供了一個構造方法,那么無參數構造系統將不再提供。
3、重要的結論:
當一個構造方法第一行既沒有this()又沒有super()的話,默認會有一個super();表示通過當前子類的構造方法調用父類的無參數構造方法。所以必須保證父類的無參數構造方法是存在的。 - 注意:this ()和super()不能共存,它們都是只能出現在構造方法第一行。
- 代碼例子:
package com.zyh.demoSuper;
//父類
public class Fu {
int num = 10;
public void method(){
System.out.println("父類方法");
}
}
package com.zyh.demoSuper;
//子類
public class Zi extends Fu{
int num = 20;
@Override
public void method(){
super.method();//調用了父類方法
System.out.println("子類方法");
}
public void show(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
package com.zyh.demoSuper;
public class test {
public static void main(String[] args) {
Zi zi = new Zi();
zi.show();
zi.method();
}
}
- 內存圖:
- 構造方法鏈
1、在任何情況下,構造一個類的實例時,將會調用沿着繼承鏈的所有父類的構造方法。當構造一個子類的對象時,子類構造方法會在完成自己的任務之前,首先調用它的父類的構,造方法。如果父類繼承自其他類,那么父類構造方法又會在完成自己的任務之前,調用它自己的父類的構造方法。這個過程持續到沿着這個繼承體系結構的最后一個構造方法被調用為止。
2、父類的構造方法是一定會執行的。
例一:(其中對象只創建了一個)
例二:
new C();
輸出結果:13654
- super什么時候不能省略?
父中有,子中又有,如果想在子中訪問"父的特征",super.不能省略。 - super是什么?
super不是引用;super也不保存內存地址,;super也不指向任何對象。
super只是代表當前對象內部的那一塊父類型的特征。