MSDN:抽象類是一些留有部分或所有成員未實現的類,以即可以由派生類來提供實現。在C#中,當一個類被abstract關鍵字修飾,咱們就稱之爲抽象類。3d
抽象類是不完整的類,由於抽象類一般包含抽象方法,而抽象方法也是不完整的;由於抽象方法不提供具體的實現,只是讓子類苦逼的實現,因此說,抽象類是不完整的類。blog
1.抽象類不能被實例化。編譯器
1-1string
public abstract class People { protected abstract void Speak(string s); }
1-2編譯
People p = new People();
當咱們試圖執行1-2的代碼時,編譯器提示以下錯誤:class
2.抽象類能夠包含抽象方法,也能夠包含普通方法,可是普通方法放在抽象類中其實是沒有意義的。方法
2-1im
public abstract class People { protected abstract void Speak(string s); protected void Walk() { } }
2-1的代碼編譯是沒有問題的,但Walk方法定義在抽象類中沒有意義。static
也許有讀者會問,普通類是否能夠包含抽象方法呢?答案是否認的。db
2-2
public class Car { protected abstract void Run(); }
2-2的代碼編譯後將報以下錯誤:
3.抽象類不能被sealed,static關鍵字修飾,由於抽象類是做爲其它類的基類,而sealed表示該類不能做爲基類。
3-1
public sealed abstract class People { protected abstract void Speak(string s); protected void Walk() { } }
3-1的代碼將報以下錯誤:
4.從抽象類派生的非抽象類必須包含抽象類中抽象方法的全部實現。
4-1
public abstract class People { protected abstract void Speak(string s); protected void Walk() { } } public class Teacher:People { }
4-1代碼報以下錯誤:
1.抽象方法不能包含方法體。
1-1
public abstract class People { protected abstract void Speak(string s); protected abstract void ShowHand() { } protected void Walk() { } }
1-1代碼將報以下錯誤:
2.抽象方法代表派生類必須提供該方法的實現。