Java繼承

Java繼承

計算機語言
繼承是面向對象最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,并能擴展新的能力[1]。Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。這種技術使得複用以前的代碼非常容易,能夠大大縮短開發周期,降低開發費用。比如可以先定義一個類叫車,車有以下屬性:車體大小,顔色,方向盤,輪胎,而又由車這個類派生出轎車和卡車兩個類,為轎車添加一個小後備箱,而為卡車添加一個大貨箱。JAVA不支持多繼承,單繼承使JAVA的繼承關系很簡單,一個類隻能有一個父類,易于管理程序,同時一個類可以實現多個接口,從而克服單繼承的缺點。
  • 中文名:Java繼承
  • 特征所屬:面向對象
  • 領域:計算機語言
  • 特點:從已有的類中派生出新的類
  • 外文名:Java inheritance
  • 優 點:使得複用以前的代碼非常容易

基本介紹

繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

Java繼承是面向對象的最顯著的一個特征。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,并能擴展新的能力。類和類之間的繼承關系可以用UML符号表示,其中父類又叫超類或基類,子類又叫派生類。父類是子類的一般化,子類是父類的特化(具體化)。 

JAVA不支持多繼承,單繼承使JAVA的繼承關系很簡單,一個類隻能有一個父類,易于管理程序,同時一個類可以實現多個接口,從而克服單繼承的缺點。在面向對象程序設計中運用繼承原則,就是在每個由一般類和特殊類形成的一般——特殊結構中,把一般類的對象實例和所有特殊類的對象實例都共同具有的屬性和操作一次性地在一般類中進行顯式的定義,在特殊類中不再重複地定義一般類中已經定義的東西,但是在語義上,特殊類卻自動地、隐含地擁有它的一般類(以及所有更上層的一般類)中定義的屬性和操作。特殊類的對象擁有其一般類的全部或部分屬性與方法,稱作特殊類對一般類的繼承。

繼承所表達的就是一種對象類之間的相交關系,它使得某類對象可以繼承另外一類對象的數據成員和成員方法。若類B繼承類A,則屬于B的對象便具有類A的全部或部分性質(數據屬性)和功能(操作),我們稱被繼承的類A為基類、父類或超類,而稱繼承類B為A的派生類或子類。繼承避免了對一般類和特殊類之間共同特征進行的重複描述。同時,通過繼承可以清晰地表達每一項共同特征所适應的概念範圍——在一般類中定義的屬性和操作适應于這個類本身以及它以下的每一層特殊類的全部對象。運用繼承原則使得系統模型比較簡練也比較清晰。

分類

繼承分為單繼承和多重繼承。單繼承是指一個子類最多隻能有一個父類。多繼承是一個子類可以有二個以上的父類。由于多繼承會帶來二義性,在實際應用中應盡量使用單繼承。Java語言中的類隻支持單繼承,而接口支持多繼承。Java中多繼承的功能是通過接口(interface)來間接實現的。

特征

(1)繼承關系是傳遞的。若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那裡繼承下來的屬性與方法,也有從類A那裡繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隐式的,但仍是類C的屬性和方法。繼承是在一些比較一般的類的基礎上構造、建立和擴充新類的最有效的手段。

(2)繼承簡化了人們對事物的認識和描述,能清晰體現相關類間的層次結構關系。

(3)繼承提供了軟件複用功能。若類B繼承類A,那麼建立類B時隻需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗餘度,大大增加程序的重用性。

(4)繼承通過增強一緻性來減少模塊間的接口和界面,大大增加了程序的易維護性。

(5)提供多重繼承機制。從理論上說,一個類可以是多個一般類的特殊類,它可以從多個一般類中繼承屬性與方法,這便是多重繼承。Java出于安全性和可靠性的考慮,僅支持單重繼承,而通過使用接口機制來實現多重繼承。

繼承格式

1

2

3

4

class父類 {

}

class子類 extends父類 {

}

實例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

//建一個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();

}

}

構造器

子類是不繼承父類的構造器(構造方法或者構造函數)的,它隻是調用(隐式或顯式)。如果父類的構造器帶有參數,則必須在子類的構造器中顯式地通過super關鍵字調用父類的構造器并配以适當的參數列表。如果父類構造器沒有參數,則在子類的構造器中不需要使用super關鍵字調用父類構造器,系統會自動調用父類的無參構造器。

優勢

Java繼承的從某種意義上講,Java繼承的短暫美就如同宇宙中所有事與其它事情都存在一種特殊的關系。教育者試圖向門外漢們解釋繼承的概念,常常通過讨論相關動物群之間的關系來解釋這一概念。在Java和NET中,在某種程度上講,所有事物都是對象類型的一種軟件組件。然而,從那裡開始,開發選擇什麼在子類和超類繼承中進行關聯是設計的重點。 

使用Java進行桌面渲染中的問題是,過多的思想投入到把在一起的可視化項目進行分組。從親子關系來看,所有地的知名的圖形元素,雖然知名的方法不同,但都與一般的Window類有着極大的關系。

所有我們選擇的、繼承于Window類的,與JDialog屬性有關的東西,都與上一級的JFrame有關,因為他們有共同的父Window類。的确,編寫可重用的代碼來管理許多相關的子對象是優秀設計的标志。正如上文說的狗和窗戶一樣,偉大的多态設計都是關于抽象、分類、設計、和繼承的。

相關詞條

相關搜索

其它詞條