標籤:
抽象類別和介面有什麼區別?有了抽象類別為什麼還要介面?
介面和抽象類別的相同點是都不能執行個體化,不同點是介面中的方法都沒有方法體,而抽象類別則不然,除了抽象方法沒有方法體外,其他方法都有方法體。
原因是:在C#中,類只能繼承一個類,但可繼承多個介面。
抽象類別:
1、不能執行個體化
2、抽象方法必須被子類重寫
3、如果類中包含有抽象方法,該類必須定義為抽象類別
抽象類別前加abstract。
抽象方法在傳回值前加abstract,沒有方法體,直接在括弧後加分號。
1、包含有抽象方法的類一定為抽象類別
2、抽象類別不一定包含抽象方法
虛方法是用來實現多態的,為了使子類的執行個體完全接替來自父類的成員,父類必須將該成員聲明為虛擬,這是通過在該成員的訪問類型前加virtual關鍵字來實現的。
子類可以選擇使用override關鍵字將父類實現替換為它自己的實現,這就是方法重寫,當然也可以不重寫。
class Animal{ public virtual void Shout() { Console.WriteLine("動物叫!"); }}class Cat:Animal{ public override void Shout() { Console.WriteLine("貓叫!"); }}class Dog: Animal{ public override void Shout() { Console.WriteLine("狗叫!"); }}class Program{ static void Main(string[] args) { Animal[] animals=new Animal[2]; animals[0]=new Cat(); animals[1]=new Dog(); foreach (var animal in animals) { animal.Shout(); } Console.ReadLine(); }}
C#抽象類別和介面