java面向對象三大特性:封裝、繼承、多態——舉例說明

概念

封裝:封裝就是將客觀的事物抽象成類,類中存在屬於這個類的屬性和方法。
繼承:繼承就是把父對象繼承過來,這樣子類就存在了父類的操作方法,java是單繼承,就是隻能繼承一個父對象。
多態:多態就是程序中允許出現重名現象,java實現多態的方式有方法重載和成員變量覆蓋兩種形式。

前期準備

首先定一個Fruit對象,裏面封裝了一個getName方法

class Fruit {
    static {
        System.out.println("我是Fruit類靜態塊");
    }

    public Fruit() {
        System.out.println("我是Fruit類構造方法");
    }

    public void getName() {
        System.out.println("我的名字是Fruit");
    }

}

再定一個Apple對象來繼承Fruit對象

class Apple extends Fruit {
	static {
		System.out.println("我是Apple類靜態塊");
	}

	public Apple() {
		System.out.println("我是Apple類構造方法");
	}

	public void getName(){
		System.out.println("我的名字是Apple");
	}
}

其中Apple對象重寫了父類的getName方法。

測試代碼

1、使用子類構建對象的時候,父類和子類的靜態塊和他們的構造方法的執行順序是什麼?
測試的main如下所示,注意父類和子類裏面有靜態塊構造方法,看下面測試代碼,可以先寫出你認爲的執行結果:

	public static void main(String[] agrs) {
		Apple apple = new Apple();
		apple.getName();
	}

測試結果如下:

我是Fruit類靜態塊
我是Apple類靜態塊
我是Fruit類構造方法
我是Apple類構造方法
我的名字是Apple

2、使用父類引用構建子類對象的時候,父類和子類的靜態塊和他們的構造方法的執行順序是什麼?
測試的main如下所示,注意父類和子類裏面有靜態塊構造方法,看下面測試代碼,可以先寫出你認爲的執行結果

	public static void main(String[] agrs) {
		//使用父類引用指向子類對象
		Fruit fruit = new Apple();
		fruit.getName();
	}

測試結果如下:

我是Fruit類靜態塊
我是Apple類靜態塊
我是Fruit類構造方法
我是Apple類構造方法
我的名字是Apple

3、如果兩塊代碼一起執行會發生什麼呢?

    public static void main(String[] agrs) {
        Fruit fruit = new Apple();
        fruit.getName();
        System.out.println("---------分割線---------");
        Apple apple = new Apple();
        apple.getName();
    }

執行結果:

我是Fruit類靜態塊
我是Apple類靜態塊
我是Fruit類構造方法
我是Apple類構造方法
我的名字是Apple
---------分割線---------
我是Fruit類構造方法
我是Apple類構造方法
我的名字是Apple
總結

1、子類對象構建的時候靜態塊和構造方法執行順序是:父類靜態塊 -> 子類靜態塊 ->父類構造方法 -> 子類構造方法
2、父類和子類的靜態塊是執行一次的
3、子類方法重寫父類方法後,使用子類構建的對象執行的都是子類的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章