繼承的語法:
修飾符 SubClass extends SuperClass {
//類定義部分
}
繼承(inheritance)通過extends關鍵字來實現,其中SubClass稱為子類,SuperClass稱為父類,基類或超類。修飾符如果是public,則該類在整個項目中可見;若無public修飾符,則該類只在當前包可見;不可以使用private和protected修飾類。
Java繼承是面向對象的最顯著的一個特征。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力。
Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得復用以前的代碼非常容易,能夠大大縮短開發周期,降低開發費用。比如可以分隔符先定義一個類叫車,車有以下屬性:車體大小,顏色,方向盤,輪胎,而又由車這個類派生出轎車和卡車兩個類,為轎車添加一個小後備箱,而為卡車添加一個大貨箱。
類和類之間的繼承關系可以用UML符號表示,其中父類又叫超類或基類,子類又叫派生類。父類是子類的一般化,子類是父類的特化(具體化)。
JAVA不支持多繼承,單繼承使JAVA的繼承關系很簡單,一個類只能有一個父類,易於管理程序,同時一個類可以實現多個接口,從而克服單繼承的缺點。
在面向對象程序設計中運用繼承原則,就是在每個由一般類和特殊類形成的一般——特殊結構中,把一般類的對象實例和所有特殊類的對象實例都共同具有的屬性和操作一次性地在一般類中進行顯式的定義,在特殊類中不再重復地定義一般類中已經定義的東西,但是在語義上,特殊類卻自動地、隱含地擁有它的一般類(以及所有更上層的一般類)中定義的屬性和操作。特殊類的對象擁有其一般類的全部或部分屬性與方法,稱作特殊類對一般類的繼承。
繼承所表達的就是一種對象類之間的相交關系,它使得某類對象可以繼承另外一類對象的數據成員和成員方法。若類B繼承類A,則屬於B的對象便具有類A的全部或部分性質(數據屬性)和功能(操作),我們稱被繼承的類A為基類、父類或超類,而稱繼承類B為A的派生類或子類。
接一個例子
現有一個父類Pet
/** * 寵物類,狗狗和企鵝的父類 * @author 北大青鳥 */ public class Pet { private String name = "無名氏"; //昵稱 private int health = 100; //健康值 private int love = 0; //親密度 /** * 無參構造方法 */ public Pet(){ this.health = 95; System.out.println("執行寵物的無參構造方法"); } /** * 有參構造方法 * @param name 昵稱 */ public Pet(String name){ this.name = name; } public String getName(){ return name; } public int getHealth(){ return health; } public int getLove(){ return love; } /** * 輸出寵物信息 */ public void print(){ System.out.println("寵物的自白:\n我的名字叫" + this.name + ",我的健康值是" + this.health + ",我和主人的親密程度是" + this.love + "。"); } }
又有一個子類 Dog
/** * 狗狗類,寵物的子類 * @author 北大青鳥 */ public class Dog extends Pet { private String strain;//品種 /** * 有參構造方法 * @param name 昵稱 * @param strain 品種 */ public Dog(String name, String strain){ super(name); //此處不能使用this.name=name; this.strain = strain; } public String getStrain(){ return strain; } }
子類繼承至父類,所以在main方法中可以用子類調用父類的方法
/** * 測試類,測試類的繼承 * @param 北大青鳥 */ public static void main(String[] args) { // 1.創建寵物對象pet並輸出信息 Pet pet = new Pet("貝貝"); pet.print(); // 2.創建狗狗對象dog比輸出信息 Dog dog = new Dog("歐歐","雪納瑞"); dog.print(); } }