本文發表於我的博客網站FunGa Blog,閱讀原文請移步深刻理解Java中的抽象類和接口。html
在瞭解抽象類以前,咱們先了解如下抽象方法
。抽象方法是種特殊的方法:它只有聲明,沒有具體實現。抽象方法聲明格式以下:編程
abstract void get();
抽象方法必須用abstract
關鍵字修飾。若是一個類中含有抽象方法,則稱這個類爲抽象類
,抽象類必須使用abstract
關鍵字修飾。由於抽象類中含有沒有具體實現的抽象方法,因此不能用抽象類建立對象。函數
抽象類特色:學習
抽象類中能夠有成員函數,能夠是變量,也能夠是常量。網站
抽象類中能夠有抽象方法,也能夠有普通方法,還能夠有靜態方法。spa
有抽象方法的類必須聲明爲抽象類,抽象類中不必定有抽象方法。設計
抽象類能夠有構造函數,可是不能建立對象,構造函數用於子類訪問父類數據的初始化。code
抽象類的子類要麼是一個抽象類,若是是一個具體類必須重寫抽象類中的抽象方法。orm
抽象類和普通類區別htm
抽象類的方法必須爲public或者protected,缺省狀況下默認爲public(由於若是是private,則不被子類繼承,子類沒法實現該方法)。
抽象類不能用來建立對象。
若是一個類繼承一個抽象類,則該類必須實現父類的抽象方法。若是子類沒有實現父類的抽象方法,則必須將該子類定義爲抽象類。
接口,英文稱做interface,在軟件工程中,接口泛指供別人調用的方法或者函數。從這裏,咱們能夠體會到Java語言設計的初衷,它是行爲的抽象,在Java中,定義接口的形式以下:
public interface Phone {
}
接口特色:
接口中能夠有變量,可是變量會被隱式的指定爲public static final
變量,也就是常量(若是用private修飾,編譯會報錯),通常不在接口中定義變量。
接口中方法只能是抽象方法,所有會被隱式的指定爲public abstract
,(若是用private、protected、static、final修飾,編譯會報錯)
接口沒有構造函數
本文發表於我的博客網站FunGa Blog,閱讀原文請移步深刻理解Java中的抽象類和接口。
成員區別
關係區別
設計理念區別
抽象類:
強調的是is a
關係,抽象類中定義的是共性特徵。
接口:
強調的是like a
關係,接口中定義的是擴展功能。
抽象類是具體類的公因式,接口是爲了將一些不相關的類「雜湊」成一個共同的羣體。一般咱們平時開發中就是多用接口,畢竟Java是單繼承。可是須要使用抽象類的時候仍是能夠用的,要是沒把握仍是用接口。
本文發表於我的博客網站FunGa Blog,閱讀原文請移步深刻理解Java中的抽象類和接口。