繼承是面向對象最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力。[1]
Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得復用以前的代碼非常容易,能夠大大縮短開發周期,降低開發費用。比如可以先定義一個類叫車,車有以下屬性:車體大小,顏色,方向盤,輪胎,而又由車這個類派生出轎車和卡車兩個類,為轎車添加一個小后備箱,而為卡車添加一個大貨箱。
Java繼承
Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得復用以前的代碼非常容易,能夠大大縮短開發周期,降低開發費用。比如可以分隔符先定義一個類叫車,車有以下屬性:車體大小,顏色,方向盤,輪胎,而又由車這個類派生出轎車和卡車兩個類,為轎車添加一個小后備箱,而為卡車添加一個大貨箱。
JAVA不支持
多繼承,單繼承使JAVA的繼承關系很簡單,一個類只能有一個父類,易於管理程序,同時一個類可以實現多個接口,從而克服單繼承的缺點。
在
面向對象程序設計中運用繼承原則,就是在每個由一般類和特殊類形成的一般——特殊結構中,把一般類的對象實例和所有特殊類的對象實例都共同具有的屬性和操作一次性地在一般類中進行顯式的定義,在特殊類中不再重復地定義一般類中已經定義的東西,但是在語義上,特殊類卻自動地、隱含地擁有它的一般類(以及所有更上層的一般類)中定義的屬性和操作。特殊類的對象擁有其一般類的全部或部分屬性與方法,稱作特殊類對一般類的繼承。
繼承所表達的就是一種對象類之間的相交關系,它使得某類對象可以繼承另外一類對象的
數據成員和成員方法。若類B繼承類A,則屬於B的對象便具有類A的全部或部分性質(數據屬性)和功能(操作),我們稱被繼承的類A為
基類、父類或
超類,而稱繼承類B為A的
派生類或子類。
繼承避免了對一般類和特殊類之間共同特征進行的重復描述。同時,通過繼承可以清晰地表達每一項共同特征所適應的概念范圍——在一般類中定義的屬性和操作適應於這個類本身以及它以下的每一層特殊類的全部對象。運用繼承原則使得
系統模型比較簡練也比較清晰。
Java繼承分類
繼承分為單繼承和多重繼承。單繼承是指一個子類最多只能有一個父類。多繼承是一個子類可以有二個以上的父類。由於多繼承會帶來
二義性,在實際應用中應盡量使用單繼承。
Java語言中的類只支持單繼承,而
接口支持多繼承。Java中多繼承的功能是通過接口(
interface)來間接實現的[1]
。
Java繼承的特征
(1)繼承關系是傳遞的。若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那里繼承下來的屬性與方法,也有從類A那里繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法。繼承是在一些比較一般的類的基礎上構造、建立和擴充新類的最有效的手段。
(2)繼承簡化了人們對事物的認識和描述,能清晰體現相關類間的層次結構關系。
(4)繼承通過增強一致性來減少模塊間的接口和界面,大大增加了程序的易維護性。
(5)提供
多重繼承機制。從理論上說,一個類可以是多個一般類的特殊類,它可以從多個一般類中繼承屬性與方法,這便是多重繼承。Java出於安全性和可靠性的考慮,僅支持單重繼承,而通過使用接口機制來實現多重繼承。
//建一個A類 class A{ //成員變量 其中num是實參 int num=0; //成員方法,其中 i 是型參 public A(int i){ //輸入int型文件輸出下面 System.out.println("aaaaaaaaaaaaaaaaaaa"); System.out.println("i= "+i); //把輸入的i賦值給成員變量num num=i; } } //B繼承A class B extends A{ int num=0; //成員方法B. public B(){ //繼承類A的方法.因為B繼承了A必然繼承了A的特性.所以輸入int值10令方法實現. super(10); System.out.println("bbbbbbbbbbbbbbbbbbbb"); //這里的num是類B的. System.out.println("num= "+num); //如果想顯示類A的num則需要用下列的super.num.這里注意num在類A中需是成員變量才可以. System.out.println("super.num= "+super.num); } } //建立測試類C public class C{ //main public static void main(String aa[]){ //new 一個對象B() new B(); } }