一.定義
MSDN:抽象類是一些留有部分或全部成員未實作的類,以便可以由派生類來提供實作。在C#中,當一個類被abstract關鍵字修飾,我們就稱之為抽象類。
二.抽象類的特點
抽象類是不完整的類,因為抽象類通常包含抽象方法,而抽象方法也是不完整的;因為抽象方法不提供具體的實作,隻是讓子類苦逼的實作,是以說,抽象類是不完整的類。
1.抽象類不能被執行個體化。
1-1
public abstract class People
{
protected abstract void Speak(string s);
}
1-2
People p = new People();
當我們試圖執行1-2的代碼時,編譯器提示如下錯誤:
2.抽象類可以包含抽象方法,也可以包含普通方法,但是普通方法放在抽象類中實際上是沒有意義的。
2-1
public abstract class People
{
protected abstract void Speak(string s);
protected void Walk()
{
}
}
2-1的代碼編譯是沒有問題的,但Walk方法定義在抽象類中沒有意義。
也許有讀者會問,普通類是否可以包含抽象方法呢?答案是否定的。
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.抽象方法不能包含方法體。
public abstract class People
{
protected abstract void Speak(string s);
protected abstract void ShowHand()
{
}
protected void Walk()
{
}
}
1-1代碼将報如下錯誤:
2.抽象方法表明派生類必須提供該方法的實作。
作者:三當家
出處:http://www.cnblogs.com/the-three/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。