java面向物件-繼承、抽象類
1.繼承 概述:在程式中,繼承描述的是事物之間的所屬關係,通過繼承可以使多種事物之間形成一種關係體系。 繼承的格式&使用 class 子類 extends 父類 {} 繼承的特點: 在java中只支援單繼承 多個類可以繼承一個父類 多層繼承是可以的 子類和父類是相對的 繼承中成員變數的特點: 子類只能獲取父類非私有成員 子父類中成員變數的名字不一樣直接獲取父類的成員變數 子父類中成員變數名字是一樣的獲取的是子類的成員變數
就近原則:誰離我近我就用誰 如果有區域性變數就使用區域性變數 如果沒有區域性變數,有子類的成員變數就使用子類的成員變數 如果沒有區域性變數和子類的成員變數,有父類的成員變數就使用父類的成員變數 super:可以獲取父類的成員變數和成員方法,用法和this是相似的
方法的重寫:在子父類當中,子類的方法和父類的完全一樣,子類重寫了父類的方法(覆蓋),當子類重寫了父類的方法之後,使用子類物件呼叫的就是子類的方法 方法的過載:在一個類中,有多個重名的方法,但是其引數不一樣(引數的個數,引數的型別,引數的順序),和返回值無關 方法重寫的注意事項: 不可以重寫父類私有的成員方法,壓根就看不到父類的私有成員 子類重寫父類方法,許可權必須大於等於父類方法的許可權 註解 @Override:方法重寫,說明下面的方法是重寫父類的方法
2.繼承中構造方法的執行順序 super(實參列表);語句 在子類的構造方法中使用,用來呼叫父類中的構造方法(具體哪一個由傳遞的引數決定),並且只能在構造方法第一行使用 this(實參列表); 語句 在類的構造方法中使用,用來呼叫本類中的其它構造方法(具體哪一個由傳遞的引數決定),並且只能在構造方法的第一行使用
3.繼承的優缺點 優點 提高了程式碼的複用性 提高了程式碼的可維護性 缺點: 類的耦合性增強了 開發的原則:高內聚低耦合 內聚:就是自己完成某件事情的能力 耦合:類與類的關係
4.抽象類 只抽取方法宣告,不抽取方法主體。那麼此方法就是一個抽象方法。 抽象類的特點: 抽象方法只能在抽象類裡面 抽象類和抽象方法必須被abstract修飾 抽象類不能建立物件(不能例項化) 抽象類中可以有非抽象的方法 抽象類和類的關係也是繼承 一個類繼承了抽象類要麼重寫所有的抽象方法,要麼他自己是抽象類
抽象類的成員的特點: 成員變數 可以有成員變數 可以有常量 成員方法 可以有抽象方法 可以有非抽象方法 構造方法 可以有構造方法的,需要對抽象類的成員變數進行初始化
5.抽象類的細節 抽象類關鍵字abstract可以和哪些關鍵字共存? 1.private: 私有的方法子類是無法繼承到的,也不存在覆蓋,而abstract和private一起使用修飾方法,abstract既要子類去實現這個方法,而private修飾子類根本無法得到父類這個方法。互相矛盾。 2.final: 抽象類不能和final共存,因為抽象類自身無法建立物件,我們需要通過子類建立物件,一旦抽象類使用final關鍵字,那麼抽象類就沒有子類 抽象方法不能和final共存,因為抽象方法後期需要被子類重寫,一旦加final無法重寫 3.static: 抽象方法不能和static關鍵字共存,因為一旦加static我們就可以通過類名直接訪問抽象方法,由於抽象方法沒有方法體,沒有任何意義,也不允許這樣做
抽象類中是否可以不定義抽象方法? 是可以的,那這個抽象類的存在到底有什麼意義呢?不讓該類建立物件,方法可以直接讓子類去使用
抽象類是否有建構函式? 有,抽象類的建構函式,是由子類的super語句來呼叫,用於給抽象類中的成員初始化