java學習筆記03

抽象類和接口的區別

相同點

  • 都位於繼承的頂端,用於被其他類實現或繼承;
  • 都不能直接實例化對象;
  • 都包含抽樣方法,其子類必須覆寫這些抽樣方法;
  • 抽象類爲部分方法提供實現,避免子類重複實現這些方法,提高代碼重用性;接口只能包含抽樣方法;
  • 一個類只能繼承一個直接父類,接口可以多繼承;
  • 抽象類是某個事物中應該具備的內容,而接口是這個事物額外的內容;
    **注意 : **
  • 優先選用接口,少用抽象類;
  • 需要定義子類的行爲,又要爲子類提供共性功能才選用抽象類;

多態

java的多態特性體現於,一個子類的對象(實現類對象)既可以給這個子類(實現類對象)引用變量賦值,也可以給其父類(接口)變量賦值。
最終多態體現爲:

  1. 父類的引用變量可以指向子類對象;
父類名 對象名 = new 子類名();
  1. 多態的前提是必須擁有子父類關係或者類實現接口關係,否則無法完成多態;
  2. 在使用多態後的父類引用變量調用方法時,會調用子類覆寫的方法;

多態定義格式

普通類式

父類的引用變量指向子類對象:

父類類型 變量名 = new 子類類型();
變量名.方法名()* 普通類多態定義格式:
	父類 變量名 = new 子類()

抽象類定義格式

	抽象類 變量名 = new 抽象類子類()

接口多態定義格式

 接口 類名 = new 接口實現類()

注意事項:

  1. 成員變量參考的是父類中的變量,存在編譯成功,否則編譯失敗;
  2. 成員方法編譯時參考父類中的方法,存在編譯成功,否則編譯失敗;
  3. 成員方法運行時參考子類中的方法,子類中不存在時,參考父類方法;

instanceof關鍵字

通過instanceof關鍵字來判斷某個對象是否屬於某種數據類型

多態-轉型

  • 向上轉型:當子類對象賦值給父類引用時,爲向上轉型,多態的本質就是向上轉型的過程。
//格式
父類型行 變量名 = new 子類類型();

特點:
* 調用子類和父類共有功能,不可調用子類特有功能;

  • 向下轉型:一個已經向上轉型的子類對象可以使用強制類型轉換轉換的格式,將父類引用轉爲子類引用,如果直接創建父類對象,無法向下轉型
//格式
子類型行 變量名 = (子類類型) 父類類型的變量;

特點:
* 可調用子類特有功能,不可調用子類和父類共有功能;
注意:
* 當不需要面對子類類型時,通過提高擴展性,或者使用父類的功能就能完成相應的操作,這時就可以使用向上轉型;
* 當要使用子類特有功能時,就需要使用向下轉型;
* 需要面對具體的子類對象;在向下轉型時容易發生ClassCastException類型轉換異常。在轉換之前必須做類型判斷。

Animal cat = new Cat();
Animal dog = new Dog();
if (dog instanceof Cat){
	Cat c = (Cat) dog;
    c.run;
}else{
	System.out.println("dog is not a instance of Cat");
}
>>>  dog is not a instance of Cat

封裝、繼承、多態的作用:

  1. 封裝:把對象的屬性與方法的實現細節隱藏,僅對外提供一些公共的訪問方式
  2. 繼承:子類會自動擁有父類所有可繼承的屬性和方法。
  3. 多態:配合繼承與方法重寫提高了代碼的複用性與擴展性;如果沒有方法重寫,則多態同樣沒有意義。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章