1. 程式人生 > >java面向物件 抽象類

java面向物件 抽象類

1.當編寫一個類時,我們往往會為該類定義一些方法,這些方法是用來描述該類的功能具體實現方式,
那麼這些方法都有具體的方法體。
但是有的時候,某個父類只是知道子類應該包含怎麼樣的方法,但是無法準確知道子類如何實現這
些方法。比如一個圖形類應該有一個求周長的方法,但是不同的圖形求周長的演算法不一樣。那該怎麼辦
呢?

分析事物時,發現了共性內容,就出現向上抽取。會有這樣一種特殊情況,就是方法功能宣告相同,
但方法功能主體不同。那麼這時也可以抽取,但只抽取方法宣告,不抽取方法主體。那麼此方法就是一
個抽象方法。

描述 JavaEE 工程師:行為:工作。
描述 Android 工程師:行為:工作。


JavaEE 工程師和 Android 工程師之間有共性,可以進行向上抽取。抽取它們的所屬共性型別:研發部
員工。由於 JavaEE 工程師和 Android 工程師都具有工作功能,但是他們具體工作內容卻不一樣。這時在
描述研發部員工時,發現了有些功能(工作)不具體,這些不具體的功能,需要在類中標識出來,通過
java 中的關鍵字 abstract(抽象)

當定義了抽象函式的類也必須被 abstract 關鍵字修飾,被 abstract 關鍵字修飾的類是抽象類。

 

2 抽象類&抽象方法的定義
抽象方法定義的格式:

public abstract 返回值型別 方法名(引數);
抽象類定義的格式:
abstract class 類名 {
}
 

//研發部員工
abstract class Developer {
	public abstract void work();// 抽象函式。需要 abstract 修飾,並分號;結束
}

//JavaEE 工程師
class JavaEE extends Developer {
	public void work() {
		System.out.println("正在研發淘寶網站");
	}

class Android extends Developer {
public void work() {
System.out.println("正在研發淘寶手機客戶端軟體");
}

 

 3 抽象類的特點:

  • 抽象類和抽象方法都需要被 abstract 修飾。抽象方法一定要定義在抽象類中。
  • 抽象類不可以直接建立物件,原因:呼叫抽象方法沒有意義。
  • 只有覆蓋了抽象類中所有的抽象方法後,其子類才可以建立物件。否則該子類還是一個抽象類。
  • 之所以繼承抽象類,更多的是在思想,是面對共性型別操作會更簡單

4.抽象類的細節問題:

1、抽象類一定是個父類?
是的,因為不斷抽取而來的。
2、抽象類中是否可以不定義抽象方法。
是可以的,那這個抽象類的存在到底有什麼意義呢?不讓該類建立物件,方法可以直接讓子類去
使用
3、抽象關鍵字 abstract 不可以和哪些關鍵字共存?

private:私有的方法子類是無法繼承到的,也不存在覆蓋,而 abstract 和 private 一起使
用修飾方法,abstract 既要子類去實現這個方法,而 private 修飾子類根本無法得到父類這個
方法。互相矛盾。