1.繼承:
通過擴展一個已有的類,並繼承該類的屬性和行為,來創建一個新的類。已有的稱為父類,新的類稱為子類(父類派生子類,子類繼承父類)。
(1)繼承的優點:①代碼的可重用性;
②父類的屬性的方法可用於子類;
③子類可擴展父類的屬性和方法;
④設計應用程序變得更加簡單。
(2)關鍵字“is a”用於判斷父類和子類的繼承關系是否正確。
(3)Java中繼承的實現:
public class 子類 extends 父類{}
(4)繼承的單根性:在Java中一個類只能有一個父類;
傳遞性:一個Java類可以父類,父類也可以有父類。
(5)所有類的根類:Object類,又叫基類或超類。Object類是每個Java類的父類,要么是直接的父類,要么就是間接的父類。
Object類中的三個重要方法:
①public boolean equals(Object x):檢測兩個對象是否相等。該方法經常被重寫。若兩個對象通過該方法判斷是相等的,那么兩個對象的 hashCode()方法應該產生相同的哈希碼
②public String toString:該方法返回對象的字符串表示。用字符串來表示對象有助於調試或測試。
③protected void finalize() throws Throwale:該方法在對象將要被垃圾回收時調用。
(6)方法重寫:子類可以重寫從父類繼承的方法,從而允許子類添加或者改變父類中方法的行為。該行為方法生在子類中,對父類方法重寫。
子類重寫父類方法時,必須遵循如下規則:
①子類的方法的返回值類型、方法名和形式參數列表必須和父類中的是相同的;
②訪問修飾符必須不小於父類中的訪問修飾符;
③子類中重寫拋出的異常不能比父類中拋出的異常多。
(7)super 關鍵字:子類想要給繼承的方法添加行為,但並不完全替換父類的方法。(默認情況下,子類構造器會調用父類的無參構造方法)
(8)final 關鍵字:當不希望一個類被繼承是則在class前加上關鍵字final。final關鍵字可以出現在返回值類型之前的任意位置,習慣上是放在訪問修飾符之后。
①final類:一個類可以聲明為最終類的 。 最終類不能被繼承。
②final方法:一個方法可以聲明為最終的 。 最終方法不能被重寫。
補充:父類的構造方法不能被繼承,可用super( , , )來調用構造器,用super調用父類方法。
(9)abstract關鍵字:使用關鍵字abstract可以聲明一個抽象類,該關鍵字可以出現在類聲明時class關鍵字前的任何地方。當類沒有實例化必要時,可將該類改為抽象類。
(10)抽象方法:①沒有方法主體;②必須出現在抽象類中;③在子類中必須被重寫,除非子類也是抽象類。
2.封裝:
(1)封裝是使類中的成員變量都是private,並提供public方法訪問這些成員變量的技術,封裝也被稱為數據隱藏。作用:保證數據的安全性。
(2)訪問器方法:允許獲取成員變量的get方法;
修改器方法:允許改變成員變量的方法。
(3)封裝的好處:①類的成員變量可以成為只讀或是只寫的;
②類可以對儲存在其成員變量中的內容有一個整體的控制;
③類的用戶不需要知道類是如何存儲數據。
eg:
1 public class Students{ 2 private String name; 3 public void setName(String name){ 4 this.name = name; 5 } 6 public String getName(){ 7 return name; 8 } 9 }
3.多態( polymorphism ):
(1)是指一個對象有多種形式的能力,一個類的子類可以定義他們唯一的行為,同時共享父類的某些相同的特征。
靜態多態:①在程序編譯時發生;
②實現方式: 方法重載;
③規則:依據對象在定義時的類型相應的調用對應類中的重載方法;
動態多態:①在運行時發生;
②實現方式: 重寫父類的同名成員的方法
③調用規則:依據對象在實例化時的類型,相應的調用對應類中的同名成員的方法。
(2)多態的技術基礎:①向上轉型技術:一個父類的引用變量可以指向不的子類對象;
②instanceof關鍵字:用於判斷運行時對象的真正類型(Java語言的多態機制導致了引用變量的聲明類型和實際引用對象的類型可能不一致,因此 引用instanceof運算符);
③動態綁定技術:運行時根據父類引用變量所指對象的實際類型執行相應的子類方法。
向上轉型:由低精度類型轉為高精度類型實行自動轉換;
向下轉型:由高精度類型轉為低精度類型需使用強制類型轉換符。
4.接口—特殊的抽象類(interface):
(1) ①接口中全都是抽象方法,不能被實例化;
②類不能繼承接口,只能“實現”接口所定義的方法;
(2)接口與類
相似之處:
①接口可以有任意數量的方法;
②接口保存以“ .Java ”為后綴名的文件,接口名需要與文件名匹配;
③接口編譯后是后綴名為“ .class ”的字節碼文件;
④在包中的接口,其相應的字節碼文件必須放置在和包名稱相匹配的一個目錄結構中。
不同之處:
①接口不能被實例化;
②接口不包含任何構造器;
③接口中所有的方法都是抽象的;
④接口中不能包含實例成員變量,唯一可以出現在接口中的成員變量必須是同時聲明為static和final,即公有靜態常量;
⑤接口不能被一個類繼承,只能被一個類實現;
⑥一個接口能夠繼承多個接口。
(3)接口具有以下性質:
①接口默認是抽象的;
②接口的中每一個方法默認也是抽象的;
③接口中的方法默認訪問級為public。
(4)接口使用原則:
①使用接口解決多繼承;
②使用接口為外部類添加功能;
③以面向對象的角度考慮,量一個類與生俱來的特征和行為和依賴於外部的可選特征和行為分離。
(5)類實現接口有2個選擇:
①實現接口中所定義的所有方法;
②聲明自己為抽象類。
使用關鍵字implements類實現接口,該關鍵字放在類聲明的extends部分之后
eg:
public class 類名 extends 父類名 implements 接口名
一個類可以實現多個接口,接口之間用逗號分隔。
implements 與 is a 都是繼承關系。
(5)使用接口的好處:
①將設計和實現分離,對外隱藏了實現;
②面向接口編程是OOP的核心。