抽象類與繼承
抽象類和繼承是許多面向對象編程語言(如Java)中的兩個重要的面向對象概念。抽象類可以看作是常規(具體)類的抽象版本,而繼承允許新類擴展其他類。抽象類是一個不能初始化但可以擴展的類。因此,抽象類只有在編程語言支持繼承的情況下才有意義。在Java中,抽象類使用Abstract關鍵字聲明,而Extends關鍵字用於從(超級)類繼承。
什麼是抽象類?
通常,抽象類,也稱為抽象基類(ABC),不能實例化(不能創建該類的實例)。因此,只有當編程語言支持繼承(通過擴展類創建子類的能力)時,抽象類才有意義。抽象類通常表示一個抽象的概念或實體,有部分實現或沒有實現。因此,抽象類充當從中派生子類的父類,這樣子類將共享父類的不完整特性,並且可以添加功能來完成它們。
抽象類可以包含抽象方法。擴展抽象類的子類可以實現這些(繼承的)抽象方法。如果子類實現了所有這樣的抽象方法,那麼它就是一個具體類。但如果不是這樣,子類也會變成抽象類。所有這一切意味著,當程序員指定一個類作為一個抽象類時,她是說這個類將是不完整的,它將有需要繼承子類完成的元素。這是在兩個程序員之間創建契約的好方法,它簡化了軟件開發中的任務。編寫代碼來繼承的程序員需要嚴格遵循方法定義(當然也可以有自己的實現)。
什麼是繼承?
繼承是一個面向對象的概念,它允許新類擴展其他類。Extends關鍵字用於實現Java編程語言中的繼承概念。繼承本質上通過允許通過新定義的類擴展現有類的屬性和行為來提供代碼重用。當一個新的子類(或派生類)擴展一個超類(或父類)時,該子類將繼承該超類的所有屬性和方法。子類可以選擇性地重寫從父類繼承的行為(為方法提供新的或擴展的功能)。通常,一個子類不能擴展多個超類(例如在Java中)。因此,不能將擴展用於多重繼承。為了有多重繼承,你需要使用接口。
抽象類和繼承有什麼區別?