1. 程式人生 > 其它 >面向物件程式設計----繼承_super_構造器的呼叫_繼承的記憶體分析(非常重要)

面向物件程式設計----繼承_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();
}
}