C# 學習筆記 多態(二)抽象類

  多態是類的三大特性之一,抽象類又是多態的實現方法之一。抽象類是什麼呢,若是把虛方法比做一個盛有純淨水的杯子,那麼此時的「純淨水」就是事先定義好的方法,咱們能夠根據不一樣的需求來改變杯子中所事先盛放的是「純淨水」仍是「咖啡」。可是抽象類呢,他更像是一個空的杯子,放在消毒櫃中,讓有須要的人本身去拿,去決定這個杯子裏裝什麼。這個「杯子」是抽象方法,存放杯子的「消毒櫃」是抽象類。ide

  咱們用abstract來聲明或定義一個抽象類或抽象方法,spa

//定義一個抽象類
[訪問權限] abstract class [類名]
{
    
}

//定義一個抽象方法
[訪問權限] abstract [返回類型] [方法名]([參數表]);

  這裏須要注意的是:code

    抽象類中能夠有抽象方法,也能夠沒有抽象方法。(「消毒櫃」能夠存放杯子,也能夠存放碗筷)blog

    抽象方法必須存在於抽象類中,而且這個方法不可擁有方法體。(首先杯子須要放在一個乾淨能夠消毒的地方,其次這個杯子是沒有被用過的,否則恐怕沒有客人想用這個杯子作什麼。。)繼承

    抽象類沒法實例化,只能被繼承於他的派生類實例化,也就是說抽象類的存在就是爲了被繼承。it

    抽象類中的抽象成員只能在其派生類中使用override關鍵字進行實現。io

  抽象類和抽象方法的使用:class

//定義一個櫃子,櫃子裏有杯子(此時沒法進行實例化)
abstract class Cabinet
{
    public abstract void Cup();
}



//第一類顧客喜歡喝牛奶
class Customer1:Cabinet
{
    public override void Cup()
    {
        Console.WriteLine("牛奶");
    }
}



//第二類顧客喜歡喝汽水
class Customer2:Cabinet
{
    public override void Cup()
    {
        Console.WriteLine("汽水");
    }
}

 

   將派生類實例化而且進行結果驗證:權限

Cabinet a = new Cabinet();  //會引發不能實例化抽象類的錯誤

Customer1 a = new Customer1();
a.Cup();

輸出結果:
牛奶

Customer2 b = new Customer2();
b.Cup();

輸出結果:
汽水

 

  這是我理解的抽象類,新手上路,有不對的地方還請各位老司機指出,對本身的收穫進行必定的總結,若是能幫到和我同樣的新手就再好不過了。晚安世界!方法

相關文章
相關標籤/搜索