Java中的“抽象”的概念:
在繼承的關係中,往往存在這樣一類現象,父類所提供的一些方法只是用來提供給子類進行重寫的,這種方法往往是“啞”的,它們本來可以不用在基類中定義邏輯,他們的目的就是爲基類的所有導出類創建一個通用的“接口”。
建立這種“接口”的唯一理由就是不同的子類可以用不同的方式表示此接口,定義一種基本的形式,表示導出類的公共部分。
抽象方法與抽象類:
我們稱這樣的方法爲“抽象方法”,抽象方法是不完整的方法,在基類中,抽象方法只有聲明、沒有方法體。我們使用abstract關鍵字定義,例如:
abstract void f();
含有抽象方法的類我們稱之爲抽象類,抽象類的定義也必須使用abstract關鍵字!如果一個類含有一個或者多個抽象方法,那麼它必須定義爲抽象的,否則編譯出錯。抽象類的定義:
abstract class T {}
抽象類是用來繼承的,抽象方法必須被重寫!當然,除非你的子類也是抽象的。抽象類是不完整的(即使你的抽象類中並不還有抽象方法),因此,實例化一個抽象類是不安全的,我們不可以嘗試去new一個抽象類對象!
創建抽象類和抽象方法是非常有用的,因爲他們可以使類的抽象性明確起來,暗示用戶應該如何使用它們,抽象類是一種很有用的重構工具,因爲這使得我們可以很容易的將公共方法沿着繼承層次結構向上移動。