面向物件程式設計----繼承_super_構造器的呼叫_繼承的記憶體分析(非常重要)
Super 是直接父類物件的引用。可以通過super來訪問父類中被子類覆蓋的方法或屬性。
普通方法:
沒有順序限制,可以隨便呼叫。
建構函式中:
任何類的建構函式中,若是建構函式的第一行程式碼沒有顯式的呼叫super(...);
那麼Java預設都會呼叫super();作為父類的初始化函式。
所以你這裡的super();加不加都無所謂。
This指向當前物件的引用(引用就是地址)
package cn.bjsxt.oop.inherit;
public class Animal /*extends Object */{
String eye;
public void run() {
System.out.println("咳咳咳!");
}
public void eat() {
System.out.println("色塊!");
}
public void sleep() {
System.out.println("乾飯!");
}
public Animal() {
// 呼叫父類的構造器,你不加編譯器自動給你加一個,
// super()只能位於第一句話Object構造器裡面沒有,因為Object沒有父類構造器
super();
System.out.println("建立一個動物!");
}
}
class Mammal extends Animal {
public void taishang() {
System.out.println("洛賽克!");
this.run();
this.eat();
}
}
class Paxing{
String eye;
public void run() {
System.out.println("咳咳咳!");
}
public void eat() {
System.out.println("色塊!");
}
public void eggSheng() {
System.out.println("了空間!");
}
}
class Bird extends Animal{
String eye;
// 重寫 子類需要 自己擴充套件把原先父類的方法重新編譯
// 在這裡把run()覆蓋掉之後,實際上還存在可以再繼承後的子類的方法中繼續用super呼叫
public void run() {
super.run();
System.out.println("我是我是一隻鳥,我會飛!");
}
public void eggSheng() {
System.out.println("了空間!");
}
public Bird() {
// 選中super然後按住ctrl單擊會跳到Bird的父類構造器
super();
System.out.println("建一個鳥窩!");
}
}
package cn.bjsxt.oop.inherit;
public class Test {
public static void main(String[] args) {
// bird繼承Animal物件再繼承Object物件
// 對於這條程式碼(Bird b = new Bird())是沒有的,實際上是有的它只是一個構造器
Bird b = new Bird();
b.run();
b.eat();
b.eggSheng();
}
}