1. 寫在前面
平時只是隨便用用,沒有整體的總結(jié)過super這個關(guān)鍵字。
因此,今天這里我們系統(tǒng)的去看一下 super 關(guān)鍵字的特性和用法。
2. 理論知識
2.1 前置
在了解 super 關(guān)鍵字之前,我們需要了解一個前置信息:
每當(dāng)創(chuàng)建子類的實例時,不會創(chuàng)建父類對象,但是會調(diào)用父類構(gòu)造方法。并且,這個父類的構(gòu)造方法會在子類構(gòu)造方法第一行(即先于子類構(gòu)造方法執(zhí)行)。
那么為什么執(zhí)行子類構(gòu)造方法之前,需要執(zhí)行父類的構(gòu)造方法呢?因為子類需要
從父類繼承 屬性 & 方法。
要繼承就要先有啊,這就要求父類構(gòu)造器先執(zhí)行,初始化相關(guān)的對象和方法。
2.2 用法
super 關(guān)鍵字的用法包括如下幾種:
-
super引用直接父類對象 -
super()調(diào)用直接父類構(gòu)造函數(shù)
3. code
3.1 super引用直接父類對象
這里通過 super 關(guān)鍵字直接引用父類對象【引用了對象自然就可以使用父類對象的屬性&方法】
- 通過父類對象引用父類成員
public class Animal{
private String name="animal";
}
public class Dog extends Animal{
private String name = "dog";
public void printName(){
sout(name);
sout(super.name); // 這里打印 直接父類 的name屬性 "animal"
}
}
- 通過父類對象引用父類方法
public class Animal{
public void bark(){
sout("animal is barking.");
}
}
public class Dog{
public void bark(){
super.bark(); // 這里調(diào)用父類的 bark() 方法。
sout("dog id barking....");
}
}
3.2 super() 調(diào)用父類構(gòu)造函數(shù)
直接看代碼吧
public class Animal{
Animal(){
sout("Animal is created.");
}
}
public class Dog{
Dog(){
super();
sout("dog is created.");
}
}
// main 方法調(diào)用
main(){
Dog dog = new Dog();
}
這里輸出如下:
Animal is created.
dog is created.