C#抽象類

轉自:http://www.cnblogs.com/ArmyShen/archive/2012/09/02/2667953.htmlhtml

abstract修飾符能夠和類、方法、屬性、索引器及事件一塊兒使用,在類聲明中使用abstract修飾符以代表這個類只能是其餘類的基類。ide

抽象類的特性函數

(1)抽象類不能被實例化post

(2)抽象類能夠包含抽象方法和抽象訪問器this

(3)不能用sealed修飾符修改抽象類,由於抽象類自己就是用來給其餘類繼承的spa

(4)抽象類的非抽象子類必須實現其繼承的全部抽象方法和抽象訪問器code

抽象方法htm

(1)抽象方法是隱式的虛方法blog

(2)抽象方法只容許聲明在抽象類中繼承

(3)抽象方法不能提供實際的實現,因此沒有方法體;抽象方法的實現是在非抽象的派生類中以override重寫實現的

(4)抽象方法聲明中不能夠使用static或者virtual修飾符

(5)abstract關鍵字不能修飾靜態方法或靜態屬性

抽象類的構造函數

(1)不要再抽象類中定義public或protected internal訪問權限的構造函數

(2)應在抽象類中定義protected或private訪問權限的構造函數

(3)若是在抽象類中定義一個protected構造函數,則在實例化派生類時,基類能夠執行初始化任務

抽象方法和虛方法的區別

虛方法有實現部分,而且派生類對其重寫是可選的;抽象方法沒有實現部分,而且強制非抽象派生類對其重寫

 

重寫虛方法例子中的代碼,改成抽象的方式實現

複製代碼
using System; using System.Collections; //抽象類 public abstract class Animal { protected string face; //聲明爲protected的構造函數,在實例化派生類時,基類能夠執行初始化工做 protected Animal() { this.face = "^_^"; /*抽象類構造函數初始化的例子*/} public abstract void eat(); public abstract string Face { get; } } public class dog : Animal { //重寫基類中的抽象訪問器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(); } }
複製代碼
相關文章
相關標籤/搜索