抽象類
1.? 在c#中使用關(guān)鍵字abstract來定義的抽象類和抽象方法。
2.不能初始化的類被叫做抽象類,他們只提供部分實(shí)現(xiàn),但是另一個(gè)類可以繼承它并且能創(chuàng)建他們的實(shí)例。
3.使用abstract在一個(gè)聲明中表示該類傾向要作為基類成員被標(biāo)示成abstract,或被包含進(jìn)一個(gè)抽象類,必須被其派生類實(shí)現(xiàn)。
抽象類的基本格式:
public??? abstract??? 類名
{
public???? abstract? ? ? 返回類型???? 方法名稱(參數(shù)列表);
}
注意:抽象方法聲明時(shí)沒有方法體,只有方法名后面跟一個(gè)分號(hào);
抽象類的例子:
abstract?? class? Transport
{
public int type;
//構(gòu)造函數(shù)
public Transport(){type=2;}
public Transport(int ty){type=ty;}
//聲明發(fā)聲的抽象方法
public?? abstract?? void?? Speak();
}
重載抽象方法(必須使用關(guān)鍵字override)
格式:
public?? override?? 返回類型 方法名稱(參數(shù)類表){方法體}
class? Passtrain:Transport?? //Transport繼承的類Passtrain
{
//重載父類的抽象的發(fā)聲方法
public? override? void?? Speak()
{
Console.WriteLine ("嘀嘀嘀嘀嘀嘀。。。。");
}
}
抽象類具有以下特征:
1、抽象類不能被實(shí)例化。
2、抽象類可以包含抽象方法和訪問器
3、不能把抽象類用密封(sealed)來修飾,那就意味著類不能被繼承,
這違反抽象類被繼承的原則。
4、抽象類的非抽象子類必須實(shí)現(xiàn)其繼承的所有抽象方法和抽象訪問器
5、通過聲明派生類也為抽象,我們可以避免所有或特定的虛方法的實(shí)現(xiàn),這就是抽象類的部分實(shí)現(xiàn)。
6、抽象類中可以是抽象方法和非抽象方法。
7、一個(gè)方法被聲明為抽象的,那么這個(gè)方法也是一個(gè)虛方法,只是它不提供具體的方法實(shí)現(xiàn)代碼。
8、派生類要通過重載為繼承的虛方法提供自己的實(shí)現(xiàn),而抽象方法則不包含具體的實(shí)現(xiàn)內(nèi)容,所以方法聲明數(shù)的執(zhí)行題中只有分號(hào)。對(duì)抽象方法不能使用static或virtual修飾符