抽象類
java
抽象類是由abstract修飾的類,而且必定包含有用abstract修飾的方法,也就是抽象方法,當一個類中有抽象方法的時候,這個類必定要被定義成抽象類。spa
抽象類中也能夠沒有抽象方法。設計
抽象類除了有抽象方法,其它的與普通的類沒什麼區別。orm
當抽象類做爲父類被子類繼承時,子類必須實現抽象類父類中的抽象方法,若是沒實現的話,則必須將子類也定義爲抽象類,父類不爲抽象類時,子類也能夠爲抽象類。對象
抽象類不能用new操做符來初始化,可是能夠定義它的構造方法
繼承
接口
接口
接口是一種與類類似的結構,只包含常量和抽象方法,即接口中出現的數據是常量,默認爲public static final定義的,方法默認爲abstract,能夠不寫。ip
一個接口能夠擴展一個或多個接口。字符串
一個類只能繼承一個類,可是能實現多個接口,從而實現多繼承。it
接口也不能用new操做符來初始化。
區別
變量 | 構造方法 | 方法 | |
抽象類 | 無限制 | 子類經過構造方法鏈調用構造方法,抽象類不能用new操做符實例化 | 無限制 |
接口 | 全部的變量必須 是public static final的 |
沒有構造方法,接口不能用new操做符實例化 | 全部的方法必須是公共的抽象實例方法 |
設計指南
抽象類和接口都是用來明確多個對象的共同特徵的。通常來講,詳細描述父子關係的強是關係(strong is-a relationship)應該用類建模。例如,由於公曆是一種日曆,因此,類java.util.GregorianCalendar和java.util.Calendar是用類繼承建模的。弱是關係(weak is-a relationship)也稱爲類屬關係(is-kind-of relationship),它代表對象擁有某種屬性。弱是關係能夠用接口來建模。例如,全部的字符串都是可比較的,所以,String類實現Comparable接口。