多態是類的三大特性之一,抽象類又是多態的實現方法之一。抽象類是什麼呢,如果把虛方法比作一個盛有純凈水的杯子,那麼此時的“純凈水”就是事先定義好的方法,我們可以根據不同的需求來改變杯子中所事先盛放的是“純凈水”還是“咖啡”。但是抽象類呢,他更像是一個空的杯子,放在消毒櫃中,讓有需要的人自己去拿,去決定 ...
多態是類的三大特性之一,抽象類又是多態的實現方法之一。抽象類是什麼呢,如果把虛方法比作一個盛有純凈水的杯子,那麼此時的“純凈水”就是事先定義好的方法,我們可以根據不同的需求來改變杯子中所事先盛放的是“純凈水”還是“咖啡”。但是抽象類呢,他更像是一個空的杯子,放在消毒櫃中,讓有需要的人自己去拿,去決定這個杯子里裝什麼。這個“杯子”是抽象方法,存放杯子的“消毒櫃”是抽象類。
我們用abstract來聲明或定義一個抽象類或抽象方法,
//定義一個抽象類 [訪問許可權] abstract class [類名] { } //定義一個抽象方法 [訪問許可權] abstract [返回類型] [方法名]([參數表]);
這裡需要註意的是:
抽象類中可以有抽象方法,也可以沒有抽象方法。(“消毒櫃”可以存放杯子,也可以存放碗筷)
抽象方法必須存在於抽象類中,並且這個方法不可擁有方法體。(首先杯子需要放在一個乾凈可以消毒的地方,其次這個杯子是沒有被用過的,不然恐怕沒有客人想用這個杯子做什麼。。)
抽象類無法實例化,只能被繼承於他的派生類實例化,也就是說抽象類的存在就是為了被繼承。
抽象類中的抽象成員只能在其派生類中使用override關鍵字進行實現。
抽象類和抽象方法的使用:
//定義一個柜子,柜子里有杯子(此時無法進行實例化) 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(); 輸出結果: 汽水
這是我理解的抽象類,新手上路,有不對的地方還請各位老司機指出,對自己的收穫進行一定的總結,如果能幫到和我一樣的新手就再好不過了。晚安世界!