天天看點

抽象類與接口一、抽象類二、接口三、抽象類與接口的異同

在面向對象的概念中,所有的對象都是通過類來描繪的,但是反過來,并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的資訊來描繪一個具體的對象,這樣的類就是抽象類。在面向對象中,抽象類主要用來進行類型隐藏和充當全局變量的角色。

舉個例子,“水果”是個抽象類,指可以食用的植物果實和種子,有水分和糖分,但世界上不存在“水果”這個實實在在的東西,它隻是一個定義。“蘋果”、“香蕉”、“鴨梨”則是具體類,它們是現實世界中存在的東西,都具有水果的共性。

接口是把隐式公共方法和屬性組合起來,以封裝特定功能的一個集合。一旦類實作了接口,類就可以支援接口所指定的所有屬性和成員。

舉個例子解釋一下,大雁屬于鳥類,可以用翅膀飛;飛機屬于交通工具,可以用引擎和機翼飛;風筝屬于玩具,可以借助風力飛。因為不是所有的鳥、交通工具和玩具都能飛,是以想讓它們飛的時候不能使用繼承,它們是完全不同的對象,但有共性——都可以在天上飛,可以定義一個“飛”接口,利用多态性讓它們三個分别以自己的方式實作“飛”這個接口。

1).都不能執行個體化。

2).包含未實作的方法聲明。

3).派生類必須實作未實作的方法,抽象類是抽象方法,接口則是所有成員。

1).抽象類可以給出一些成員的實作,接口卻不包含成員的實作,抽象類的抽象成員可以被子類部分實作,接口的成員需要實作類完全實作。

2).一個類隻能繼承一個抽象類,但可以實作多個接口。

3).抽象類中可以有成員變量(包含靜态成員變量)、屬性、常量和靜态方法,并且他們可以是非公共的;而接口中不能有成員變量、常量、靜态方法,隻能有公共的屬性。

4).從設計角度講,抽象類是從子類中發現了公共的東西,泛化出父類,然後子類繼承父類,而接口是根本不知道子類的存在,方法如何實作還不确定,預先定義。也就是說抽象類是自底而上抽象出來的,接口是自頂向下設計出來的。

5).抽象類主要用于關系密切的對象;而接口适合為不相關的類提供通用功能。

類是對對象的抽象,抽象類是對類的抽象,接口是對行為的抽象,它們的共性就是抽象。如果隻關注行為對象,也可以認為接口就是抽象類。

繼續閱讀