abstract修飾符可以和類、方法、屬性、索引器及事件一起使用,在類聲明中使用abstract修飾符以表明這個(gè)類只能是其他類的基類。 抽象類的特性 (1)抽象類不能被實(shí)例化 (2)抽象類可以包含抽象方法和抽象訪問(wèn)器 (3)不能用sealed修飾符修改抽象類,因?yàn)槌橄箢惐旧砭褪怯脕?lái)給其他類繼承的 (4)抽象類的非抽象子類必須實(shí)現(xiàn)其繼承的所有抽象方法和抽象訪問(wèn)器 抽象方法 (1)抽象方法是隱式的虛方法 (2)抽象方法只允許聲明在抽象類中 (3)抽象方法不能提供實(shí)際的實(shí)現(xiàn),所以沒有方法體;抽象方法的實(shí)現(xiàn)是在非抽象的派生類中以override重寫實(shí)現(xiàn)的 (4)抽象方法聲明中不可以使用static或者virtual修飾符 (5)abstract關(guān)鍵字不能修飾靜態(tài)方法或靜態(tài)屬性 抽象類的構(gòu)造函數(shù) (1)不要再抽象類中定義public或protected internal訪問(wèn)權(quán)限的構(gòu)造函數(shù) (2)應(yīng)在抽象類中定義protected或private訪問(wèn)權(quán)限的構(gòu)造函數(shù) (3)如果在抽象類中定義一個(gè)protected構(gòu)造函數(shù),則在實(shí)例化派生類時(shí),基類可以執(zhí)行初始化任務(wù) 抽象方法和虛方法的區(qū)別 虛方法有實(shí)現(xiàn)部分,并且派生類對(duì)其重寫是可選的;抽象方法沒有實(shí)現(xiàn)部分,并且強(qiáng)制非抽象派生類對(duì)其重寫
重寫虛方法例子中的代碼,改為抽象的方式實(shí)現(xiàn) using System; using System.Collections; //抽象類 public abstract class Animal { protected string face; //聲明為protected的構(gòu)造函數(shù),在實(shí)例化派生類時(shí),基類可以執(zhí)行初始化工作 protected Animal() { this.face = "^_^"; /*抽象類構(gòu)造函數(shù)初始化的例子*/} public abstract void eat(); public abstract string Face { get; } } public class dog : Animal { //重寫基類中的抽象訪問(wèn)器Face public override string Face { get { return face; } } //重寫基類中的抽象方法eat public override void eat() { Console.WriteLine("狗吃骨頭 " + Face); } } public class cat : Animal { public override string Face { get { return face; } } public override void eat() { Console.WriteLine("貓吃魚 " + Face); } } public class panda : Animal { public override string Face { get { return face; } } public override void eat() { Console.WriteLine("熊貓吃竹子 " + Face); } } public class MainFun { static void Main() { Animal[] anim = new Animal[3]; anim[0] = new dog(); anim[1] = new cat(); anim[2] = new panda(); anim[0].eat(); anim[1].eat(); anim[2].eat(); Console.ReadKey(); } } |
|