前言
- 類是對對象的抽象,具有共同屬性和行為的許多對象抽象出一個類。
- 例如:有三個學生小明,小紅,小李都有姓名,年齡,身高,體重,都會吃,睡,學習等等,我們可以將這些屬性和行為抽象出來成為一個類,也就是人類。
- 假設多個類存在相同屬性和行為時,我們同樣可以將這些內容抽取到單獨的一個類中,那么這多個類沒有必要再定義這些屬性和行為,只需要繼承這個單獨的類就好了,這就是繼承。
- 總結:類是對對象的抽象,繼承是對某一批類的抽象。
繼承的格式:
格式
- 通過extends關鍵字可以實現類與類的繼承
- class 子類類名 extends 父類類名 {}
- 被繼承的這個類稱為父類,基類或者超類
- 繼承的這個類稱為子類或者派生類。
//父類
class Fu{}
//子類
class Zi extends Fu{}
類與類之間有兩種格式。
一種是(is a)屬於繼承;
另一種是(has a)屬於組合;
繼承的特點:
- 通過extends關鍵字,實現了繼承之后,讓類與類之間產生了關系。
- 繼承的本質就是抽取共性代碼,多個重復代碼的向上抽取,簡化代碼。
- 類是對一批對象的抽象,繼承是對一批類的抽象。
- 父類又被稱為超類,或者基類,子類又被稱為派生類。
- Java是面向對象語言,萬事萬物皆是對象,為了滿足這個設計原則,所有的類都直接或者間接繼承自Object類。
繼承的優缺點
優點:
- 簡化了代碼
- 提高了擴展性
- 提高了可維護性
缺點:
造成了耦合性過高,牽一發動全身
編寫Java程序時一般要滿足開閉原則。即:對擴展開放,對修改關閉;
高內聚,低耦合: 類與類之間,功能與功能之間,模塊與模塊之間,功能盡量內聚,不同模塊之間,盡量獨立。
繼承的注意點(重要)
先總結再詳解
- 單一繼承性。(在Java中是不支持多繼承的,通俗的說子類只能有一個父類,而父類可以有很多子類。)
- 支持多層繼承。(繼承可以一直傳下去,子類有父類,父類又有父類...)
- 如果父類成員使用private修飾,那么子類不能被繼承。(private只是對本類有效)
- 如果一個子類繼承了父類的屬性和方法還可以有自己特有的屬性和方法。(不光有父類的屬性(可繼承的)和方法(可繼承的),也有自己獨有的屬性和方法。)
- 當子類和父類的成員變量重名的時候,子類優先。(就近原則)
class Fu {
String name = "x";
int age = 40;
public Fu(){}
}
class Zi extends Fu {
int age = 10;
public Zi(){}
public void print() {
System.out.println(age);
}
}
結果為10;
- 構造方法不能夠被繼承(構造方法必須要與類名保持一致)。
繼承的使用
- 一般在寫代碼的時候發現代碼中存在重復代碼,需要向上抽取,考慮繼承。
- 當某個類的設計非常復雜的時候可以考慮繼承 例如: 設計一個窗口類
(繼承是一把雙刃劍,要慎用!)
以上
