區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於“是”的關係;而接口是定義行爲規範,因此對於實現接口的子類來說,相對於接口來說,是“行爲需要按照接口來完成”。
區別二,抽象類在定義類型方法的時候,可以給出方法的實現部分,也可以不給出;而對於接口來說,其中所定義的方法都不能給出實現部分。
區別三,繼承類對於兩者所涉及方法的實現是不同的。繼承類對於抽象類所定義的抽象方法,可以不用重寫,也就是說,可以延用抽象類的方法;而對於接口類所定義的方法或者屬性來說,在繼承類中必須要給出相應的方法和屬性實現。
區別四,在抽象類中,新增一個方法的話,繼承類中可以不用作任何處理;而對於接口來說,則需要修改繼承類,提供新定義的方法。
如下給出兩者的簡單對比表格。
|
接口 |
抽象類 |
多繼承 |
支持 |
不支持 |
類型限制 |
沒有 |
有,只能是引用類型 |
方法實現 |
繼承類型中必須給出方法實現 |
繼承類中可以不給出 |
擴展性 |
比較麻煩 |
相對比較靈活 |
多層繼承 |
比較麻煩,需要藉助虛函數 |
比較靈活 |