天天看點

走近抽象類與抽象方法

一.定義

     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/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。