程序設(shè)計(jì)中的抽象類與接口
一、導(dǎo)入語:
抽象類和接口都是進(jìn)行面向?qū)ο笤O(shè)計(jì)時(shí)專用的設(shè)計(jì)結(jié)構(gòu),在實(shí)際進(jìn)行項(xiàng)目設(shè)計(jì)時(shí),經(jīng)常需要考慮的問題就是使用抽象類還是接口?下面通過對(duì)于抽象類和接口進(jìn)行簡單的比較,了解兩者之間的區(qū)別和聯(lián)系,從而在實(shí)際設(shè)計(jì)時(shí)使用恰當(dāng)?shù)慕Y(jié)構(gòu)。
二、相關(guān)概念
1、抽象類:聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽像類(abstract class)或含有一個(gè)或多個(gè)抽象方法的類稱為抽象類且不能實(shí)例化。
2、接口:是把隱式公共方法和屬性組合起來,以封裝特定功能的一個(gè)集合。
三、抽象類與接口的異同
1、類是對(duì)對(duì)象的抽象,抽象類則是對(duì)類的抽象.而接口只是一個(gè)行為的規(guī)范或規(guī)定。
2、一個(gè)類一次可以實(shí)現(xiàn)若干個(gè)接口,但是只能擴(kuò)展一個(gè)父類(繼承一個(gè)父類)。
3、如果抽象類實(shí)現(xiàn)接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實(shí)現(xiàn),而在抽象類的子類中實(shí)現(xiàn)接口方法。
4、接口和抽象類都不能實(shí)例化,都包含未實(shí)現(xiàn)的方法聲明,派生類必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法,一個(gè)抽象類可以包含抽象和非抽象方法,當(dāng)一個(gè)類繼承于抽象類,那么這個(gè)派生類必須實(shí)現(xiàn)所有的基類抽象方法,而接口則只能對(duì)其所有成員進(jìn)行方法簽名(方法、其他成員)。
5、抽象類用abstract class聲明,接口用interface聲明,接口名稱前要加‘I’,接口中的方法或?qū)傩郧懊娌荒苡行揎椃?、方法沒有方法體。
interface IInterface
{
? ? void Method1();//只能聲明方法簽名
}
abstract class MyAbs:IInterface? //抽象類還可繼承于接口
{
? ?public abstract void AbMethod1();//抽象方法
? ?public void Method1() //非抽象方法
? ? {
? ? ? ? Console.WriteLine("MethodimplementedfromtheIInterface");
? ? }
}
class MyClass:MyAbs
{
? ? public override void AbMethod1() //繼承后,必須實(shí)現(xiàn)抽象方法
? ? {??
? ? ? ? ?Console.WriteLine("Abstarct method #1");?
? ? }??
}
class MyClient
{
? ? public static void Main()
? ? {
? ? ? ? MyClass mc=new MyClass();
? ? ? ? mc.Method1();
? ? }
}
四、抽象類與接口的用法
1、什么時(shí)候使用抽象類或接口?
當(dāng)設(shè)計(jì)中為了規(guī)范類中方法聲明的結(jié)構(gòu)(即類的行為)時(shí),使用抽象類或接口。也就是強(qiáng)制子類對(duì)外部提供統(tǒng)一的方法聲明時(shí),使用抽象類或接口。
2、什么時(shí)候使用抽象類?
當(dāng)滿足以下的條件時(shí),最好使用抽象類進(jìn)行設(shè)計(jì):
a)子類不繼承其它父類
b)子類中存在完全相同的功能實(shí)現(xiàn)的方法
c)子類中存在相同的屬性
d)設(shè)計(jì)出的結(jié)構(gòu)需要繼承其它類
當(dāng)需要滿足d條件時(shí),只能使用抽象類,否則也可以考慮使用接口實(shí)現(xiàn)。
3、什么時(shí)候使用接口?
當(dāng)滿足以下的條件時(shí),最好使用接口進(jìn)行設(shè)計(jì):
a)子類已經(jīng)繼承了其它父類
b)子類中不存在完全相同的功能實(shí)現(xiàn)方法
c)子類中不存在相同的屬性
d)設(shè)計(jì)出的結(jié)構(gòu)不需要繼承其它類
當(dāng)需要滿足a條件時(shí),只能使用接口,否則也可以考慮使用抽象類實(shí)現(xiàn)。
4、抽象類和接口的其它用途
a)禁止創(chuàng)建該類的對(duì)象時(shí),可以把該類聲明為抽象類。
b)當(dāng)需要存儲(chǔ)大量的常量數(shù)據(jù),而這些常量數(shù)據(jù)將會(huì)在項(xiàng)目中的多個(gè)類之間使用時(shí),可以使用接口。
c)當(dāng)需要統(tǒng)一具有某種功能的類的對(duì)象時(shí),可以使用接口。