抽象類和介面是支援抽象定義的兩種機制。兩者具有很大的相似性,同時也存在很大的區別。
在了解抽象類之前先了解一下什麼是抽象方法。
抽象方法就是被abstract
關鍵字修飾的方法,這種方法只有方法名、引數列表和返回值型別,沒有方法體,如下
abstract
void
setname
(string name)
;abstract string getname()
;
抽象方法預設的許可權訪問修飾符為public
public
abstract
void
show()
;
在物件導向的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。
比如,在乙個圖形編輯軟體的分析設計過程中,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣乙個概念,形狀這個概念在問題領域並不是直接存在的,它就是乙個抽象概念。而正是因為抽象的概念在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠例項化的。
抽象類的一些特點
除了這些特殊之處,和普通類一樣
abstract class
的應用場合
一句話,在既需要統一的介面,又需要例項變數或缺省的方法的情況下,就可以使用它。最常見的有:
我們一開始使用的的介面,後來實現的子類裡有些子類有共同屬性,或者相同的方法實現,所以提取出來乙個抽象類,作為類和介面的中介。介面是設計的結果,而抽象類是重構的結果。
抽象類和介面都不能直接例項化。如果要例項化,涉及到多型。抽象類要例項化,抽象類定義的變數必須指向乙個子類物件,這個子類繼承並實現了抽象類所有的抽象方法。介面要例項化,介面定義的變數必須指向乙個子類物件,這個子類繼承並實現了介面所有的方法。
抽象類要被子類繼承,介面要被子類實現。
抽象類裡既可以有抽象方法,也可以有方法實現;介面只能有抽象方法。
抽象類裡面的抽象方法必須被子類實現,如果子類不能全部實現,子類必須也是抽象類。介面裡面的方法必須被子類實現,如果子類不能全部實現,子類必須是抽象類。
介面裡面的方法不能有具體的實現,這說明介面是設計的結果,而抽象類是重構的結果。
抽象類裡面可以沒有抽象方法,如果乙個類裡面有抽象方法,那麼這個類一定是抽象類。
抽象類中的抽象方法都要被實現,所以抽象方法不能是靜態的static,也不能是私有的private。
介面可以繼承多個介面;類可以實現多個介面,但是只能繼承乙個類。
抽象類主要用來抽象類別,介面主要用來抽象方法功能。關注事物的本質,用抽象類;關注一種操作,用介面。
Java核心 抽象類和介面
介面和內部類為我們提供了一種將介面與實現分離的更加結構化的方法。介面被用來建立類與類之間的協議。inte ce不僅僅是乙個極度抽象的類,它允許人們通過建立乙個能夠被向上轉型為多種基類的型別,來實現某種類似多重繼變種的特性。抽象類是普通類與介面之間的中庸之道,儘管在構建具有某些未實現方法的類時,你的第...
java基礎知識回顧之抽象類
抽象類 抽象 籠統,模糊,看不懂!不具體。特點 1,方法只有宣告沒有實現時,該方法就是抽象方法,需要被abstract修飾。抽象方法必須定義在抽象類中。該類必須也被abstract修飾。2,抽象類不可以被例項化。為什麼?因為呼叫抽象方法沒意義。因為沒有方法體 3,抽象類必須有其子類覆蓋了所有的抽象方...
java抽象類和抽象方法
抽象類就是不能使用new方法進行例項化的類,即沒有具體例項物件的類。抽象類有點類似 模板 的作用,目的是根據其格式來建立和修改新的類。物件不能由抽象類直接建立,只可以通過抽象類派生出新的子類,再由其子類來建立物件。當乙個類被宣告為抽象類時,要在這個類前面加上修飾符abstract。在抽象類中的成員方...