抽象類與接口
抽象類和接口是許多面向對象編程語言(如Java)中的兩種面向對象結構。抽象類可以被視為常規(具體)類的抽象版本,而接口可以被視為實現契約的一種方式。抽象類是一個不能初始化但可以擴展的類。接口是必須由其他類實現的類型。在Java中,抽象類使用Abstract關鍵字聲明,而interface關鍵字用於定義接口。
什麼是抽象類?
通常,抽象類,也稱為抽象基類(ABC),不能實例化(不能創建該類的實例)。因此,只有當編程語言支持繼承(通過擴展類創建子類的能力)時,抽象類才有意義。抽象類通常表示一個抽象的概念或實體,有部分實現或沒有實現。因此,抽象類充當從中派生子類的父類,這樣子類將共享父類的不完整特性,並且可以添加功能來完成它們。
抽象類可以包含抽象方法。擴展抽象類的子類可以實現這些(繼承的)抽象方法。如果子類實現了所有這樣的抽象方法,那麼它就是一個具體類。但如果不是這樣,子類也會變成抽象類。所有這一切意味著,當程序員指定一個類作為一個抽象類時,她是說這個類將是不完整的,它將有需要繼承子類完成的元素。這是在兩個程序員之間創建契約的好方法,它簡化了軟件開發中的任務。編寫代碼來繼承的程序員需要嚴格遵循方法定義(當然也可以有自己的實現)。
什麼是接口?
接口是一種抽象類型,用於指定由實現該接口的類實現的協定。interface關鍵字用於定義接口,Implements關鍵字用於通過類實現接口(在Java編程語言中)。通常,接口只包含方法簽名和常量聲明。任何實現特定接口的接口都應該實現接口中定義的所有方法,或者應該聲明為抽象類。在Java中,對象引用的類型可以定義為接口類型。但該對象必須為null或應包含實現該特定接口的類的對象。使用Java中的Implements關鍵字,可以實現單個類的多個接口。
抽象類和接口有什麼區別?