java基礎學習-繼承、多態

繼承

繼承的作用:

繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行爲,並能擴展新的能力。

實現語法:

關鍵字 extends
public class Father {
	final String flag = "zhang";

	public Father() {
		System.out.println("構造Father");
	}

	public void run() {
		System.out.println("father run");
	}
}

public class Son  extends Father {
	final String flag = "lin";

	public Son() {
		System.out.println("構造Son");
	}

	public void run() {
		System.out.println("son run");
	}
}
public class GrandSon extends Son{
	final String flag = "wang";

	public GrandSon() {
		System.out.println("構造GrandSon");
	}

	public void run() {
		System.out.println("grandson run");
	}
	
	public static void main(String[] args) {
		//強轉運行時出錯
		//Son son = (Son) new Father();
		
		Son son = new Son();
		System.out.println(son.flag);
		//構造Father
		//構造Son
		//lin
		
		Father father = new Son();
		System.out.println(father.flag);
		father.run();
		//構造Father
		//構造Son
		//zhang
		//son run
		
		Father father2 = new GrandSon();
		System.out.println(father2.flag);
		father2.run();
		//構造Father
		//構造Son
		//構造GrandSon
		//zhang
		//grandson run
	}
}


繼承的一些規則:

1.關於構造

默認情況下,調用子類則會先調用父類的默認構造函數
如果在子類的構造方法中想要調用父類的構造方法,super必須使用在第一行語句(很好理解,父類先執行)
如果父類沒有默認構造方法時,子類必須使用super顯示調用父類特定的構造方法(同上)
如果不想調用父類的默認構造方法,則需在子類的構造方法中使用super(父類構造方法參數);
構造函數不能被繼承
當多級繼承A extend B B extendC   C extend D extend D 則構造方法(實例)調用順序DCBA,有父纔有子

2.重寫

父類的屬性與方法子類可以直接使用(private修飾的除外),子類可以重寫父類的方法(全部要一樣)並覆蓋直接調用,此時要調用父類可用super.方法
重寫後的方法不能比被重寫的方法有更嚴格的訪問權限(可以相同)
重寫後的方法不能比重寫的方法產生更多的例外

3.super

訪問父類被隱藏的成員變量,如:super.variable;
調用父類中被重寫的方法,如:super.Method([paramlist]);
調用父類的構造函數, 如:super([paramlist]);

4.多層繼承

不支持多繼承,但支持多層繼承
注意,在多成繼承的情況下,從頂層開始繼承,也就是構造方法調用順序
從最頂層開始,所以一般要關注最底層的,因爲他如果最後一次重寫方法
則以他爲主

5.繼承範圍

  同一個包中 不同包中的子類 
private    
default  
protected 
public  

6.其他

重寫是伴隨着繼承的,重載是在同一個類

多態

多態是什麼

多態放在這裏講主要是,多態是基於繼承
多態體現爲:體現爲派生類向上轉型爲基類
如Father father = new Son();
多態是一種運行期的行爲不是編譯器行爲,所以要運行了纔出錯
多態的一個好處,屏蔽子類的差異性,用父類的一個公共性解決
當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;
如果有,再去調用子類的該同名方法。

類型轉換

1.向上轉型

將子類型轉換爲父類型,向上轉型不需要顯示指定
Father father = new Son();

2.向下轉型

將父類型轉換爲子類型,向下轉型需要顯示指定
Father father = (Son)new Son();
Son son = (Son)father;//這樣才能調用子類的方法
son.sing();
//Son son = (Son) new Father();//強轉失敗,運行報錯




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