天天看點

Java千百問_05面向對象(003)_java中抽象概念如何展現的

<a href="http://blog.csdn.net/ooppookid/article/category/6134850">點選進入_更多_java千百問</a>

抽象,和具體對立,定義了事物的性質,事物的性質會随着抽象概念的改變而改變。

抽象類和普通類一樣,是一個模版。相比普通類,抽象類不具備執行個體化對象的能力。抽象類也可以定義屬性和方法,比之普通類,它還可以定義沒有實作的方法,即抽象方法。 

通常會用一個具體類(子類)繼承抽象類(父類),實作抽象類中的抽象方法。父類包含子類的集合的通用功能,但父類本身過于抽象而無法被單獨使用。

例如:将脊椎動物定義為一個抽象類,它具有頭、軀幹、尾等屬性,具有吃、繁殖等具體行為,還有一個抽象行為:吠叫,吠叫這個行為并不具體,因為不同種類的脊椎動物吠叫行為并不相同。狗類繼承脊椎動物類,實作狗的吠叫行為。

java中使用abstract關鍵字來聲明一個類的抽象。abstract需要寫在class關鍵字前面。

執行個體:

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

36

37

38

39

40

41

42

43

44

請注意,這個employee類與具體類沒有什麼不同。現在這個類是抽象的,但它仍然有三個字段,七種方法,和一個構造函數。

但現在如果想執行個體化這個類,如下:

編譯後,會得到以下錯誤: 

employee.java:46: employee is abstract; cannot be instantiated 

employee e = new employee(“george w.”, “houston, tx”, 43); 

1 error

我們可以繼承employee類,如下所示:

這裡,我們可以執行個體化一個salary對象,這個對象将繼承employee類的三個字段,七種方法。

運作後産生以下結果: 

constructing an employee 

call mailcheck using salary reference – 

within mailcheck of salary class 

mailing check to mohd mohtashim with salary 3600.0

call mailcheck using employee reference– 

mailing check to john adams with salary 2400.

如果你想在抽象類中定義一個方法,但是希望該方法由子類來決定實際的執行情況,可以在父類中定義抽象方法。 

聲明一個抽象方法也需要abstract關鍵字。抽象方法隻是一個方法簽名,沒有方法實作,故不需要使用花括号。 

如下所示:

聲明一個抽象方法有兩個規則:

這個類也必須是抽象類。

所有子類要麼重寫抽象方法,要麼聲明本身也為抽象。

如果salary類是employee類的子類,那麼它必須實作computepay() 方法,如下:

下一篇: about porting