多態是類的三大特性之一,抽象類又是多態的實現方法之一。抽象類是什麼呢,若是把虛方法比做一個盛有純淨水的杯子,那麼此時的「純淨水」就是事先定義好的方法,咱們能夠根據不一樣的需求來改變杯子中所事先盛放的是「純淨水」仍是「咖啡」。可是抽象類呢,他更像是一個空的杯子,放在消毒櫃中,讓有須要的人本身去拿,去決定這個杯子裏裝什麼。這個「杯子」是抽象方法,存放杯子的「消毒櫃」是抽象類。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(); 輸出結果: 汽水
這是我理解的抽象類,新手上路,有不對的地方還請各位老司機指出,對本身的收穫進行必定的總結,若是能幫到和我同樣的新手就再好不過了。晚安世界!方法