1. 程式人生 > >C#之抽象類和抽象方法

C#之抽象類和抽象方法

一、前言

在學習C#的時候經常會看到一個名詞“抽象類”,那什麼是抽象類,抽象類是用來幹什麼的,在看了很多部落格和資料,都說的很官方,理解起來很難,並且好多部落格資料都是不斷地抄襲抄襲,寫的千篇一律,基本都很相似,那下面小編就根據自己的理解說以下抽象來,結合抽象類把抽象方法也說了。

抽象方法:在類中沒有方法體的方法,就是抽象方法。

抽象類:含有抽象方法的類就叫抽象類。

二、抽象類

 

 

1、什麼是抽象類

 

抽象類中的方法既可以有抽象方法,也可以有非抽象方法,可以全部都是抽象方法,也可以全部都是非抽象方法

 

抽象方法只能出現在抽象類或介面中,不能出現在非抽象類中

 

抽象類和介面不能new物件

 

抽象類可以繼承抽象類,也可以繼承非抽象類

 

2.概念

 

籠統的,模糊,不具體的類

3.示例圖

 

 

 

為什麼說籠統的呢?從上圖可以看出來,圖中有個動物類,那動物類是一個很廣的範圍, 它只是一個概念,我們很難把動物這個類很具體的表現出來。所以它是一種籠統的,模糊,不具體的類。

4.個人理解

我們可以把抽象類看作是類的集合,把類看成是物件的集合,這樣一類我們對抽象類的理解就清晰多了。

 

那抽象類有什麼樣的特點呢?

 

 

           方法只有宣告沒有實現,需要被abstract關鍵字修飾,抽象方法必須定義在抽象類中,該類也必須被abstract關鍵字修飾

 

           抽象類不可以被例項化,因為呼叫抽象方法沒意義

 

           抽象類必須有其子類覆蓋了所有的抽象方法後,才可以被例項化,否則這個子類還是是個抽象類

 

1.抽象方法只能定義在抽象類中,抽象的方法和抽象的類必須由關鍵字abstract修飾。

2.抽象類值只定義方法宣告,不定義功能主題(即方法的實現)。

3.抽象類不可以被建立物件。

抽象類就是一個不存在的東西,人們無法定義它,

抽象方法和抽象類又absctract修飾

5.性質:

 

a、抽象類只能用作其他類的基類,不能建立抽象類物件例項。

 

b、抽象類不能用作引數型別、函式返回型別、或顯示轉換的型別,

 

但可以宣告指向抽象類的指標變數、此指標可以指 向它的派生類,進而實現多型性

 

c、如果在抽象類的派生類中沒有重新說明純虛擬函式,則該函式在派生類中

 

仍然為純虛擬函式,而這個派生類仍然還是一個抽象類。

 

看看例項

//動物類程式碼

//動物類程式碼

 public abstract class Animal

        {

            private string _name;

            public string Name

            {

                get { return _name; }

                set { _name = value; }

            }



            private char _gender;

            public char Gender

            {

                get { return _gender; }

                set { _gender = value; }

            }

            private int _age;

            public int Age

            {

                get { return _age; }

                set { _age = value; }

            }

            public abstract void Shout();

             }

           public class Pig : Animal

        {

            public override void Shout()

            {

                Console.WriteLine("哼哼叫");

            }

        }

//客戶端程式碼

static void Main(string[] args)

        {



 Pig pig = new Pig();

            pig.Shout();

            Console.ReadKey();

}

三、抽象方法

為什麼要用抽象方法,它有什麼好處?

抽象方法是一個模板或約束,避免了子類的隨意性,需要實現它的類必須重寫它的抽象那個方法。

舉個例子

就拿動物的抽象類來說,我們定義一個叫聲的方法,我們只知道有個方法,讓動物叫,可是動物多了,到底讓那個叫我們並不知道,它只是一個抽象的類,不具體,也沒有指明讓那個物件叫。這也就是說抽象方法為什麼沒有方法體了,如果有方法體我們就可以準確的知道那個動物叫了,它的叫聲什麼可以準確的形容出來了。要是我們想要準確的知道某個動物的叫聲是什麼就要重寫它。