抽象類
先說個事,一個類實例化為一個實例。就是一只狗,實例化一下,就成了一只哈士奇(具體的二哈)。但是,一個動物類實例化吶,成了啥?
壓根就不能實例化。這,就是抽象類的概念引入。
概念:C#允許把類和方法聲明為abstract,即抽象類和抽象方法。
抽象類通常代表一個抽象的概念,他提供一個繼承的出發點,當設計一個新的抽象類時,
一定是用來繼承的。所以在一個繼承關系形成的等級結構中,樹葉節點應當為具體類,
而樹枝節點均應當為抽象類。--摘自《大話設計模式》
注意:
1.抽象類不能被實例化。
2.抽象方法必須被子類重寫。
3.如果類中包含抽象方法,那么類就必須定義為抽象類 ,無論是否還包含其他方法。
abstract class Animal //抽象類的聲明必須帶關鍵字abstract, { public abstract void Eat();//抽象類中的抽象方法沒有方法體,且必須聲明為關鍵字abstract //且 抽象方法必須為public,必須要寫關鍵字abstract public abstract void Shout(); public void ShowAbstractAnimal() //這不是個抽象方法,可以被其子類直接調用 { Console.WriteLine("我會展示Animal"); } void Show() //這樣也是可以的 { } } class Dog : Animal { public Dog(string name) { this.name = name; } private string name = ""; public string Name { get { return name; } set { value = name; } } public void ShowCharacter() // 抽象類中可以存在非抽象方法 { Console.WriteLine("This is " + Name); } public override void Eat() //抽象類中的方法必須要全部實現,且必須聲明為public,想知道為啥,干掉他試試(絕壁報錯哈)。 { Console.WriteLine("Eat....By..." + Name); } public override void Shout() //抽象類中的方法必須要全部實現。 { Console.WriteLine("Shot....By.." + Name); } } class Cat : Animal { public Cat(string name) { this.name = name; } private string name;//可以有自己的字段 public string Name //可以有自己的非抽象屬性(屬性即是方法,同上注釋一個原理) { get { return name; } set { value = name; } } public void MiaoMIao() { Console.WriteLine("This is " + Name); } public override void Eat() { Console.WriteLine("Eat .. By .." + Name); } public override void Shout() { Console.WriteLine("Shot...By..." + Name); } }
要學會真正理解怎么用,還是老規矩,把上面代碼拿過去敲敲,再注意一下注釋的解釋即可。