c 什麼是抽象類 抽象方法

2021-09-10 02:56:15 字數 1947 閱讀 5500

三:抽象方法的特性

四:抽象方法與抽象類之間的關係

五:抽象類與一般類的相同點及不同點

先看一句話

c#允許把類和方法宣告為abstract,即抽象類和抽象方法。

抽象類通常代表乙個抽象的概念,他提供乙個繼承的出發點,當設計乙個新的抽象類時,一定是用來繼承的。所以在乙個繼承關係形成的等級結構中,樹葉節點應當為具體類,而樹枝節點均應當為抽象類。–摘自《大話設計模式》

這是比較官方的說法,下面用我自己的語言來描述下

在 c# 中,使用關鍵字abstract來定義抽象類和抽象方法。

抽象類是一種特殊的基礎類,並不與具體的事物聯絡。它有以下特性

1:抽象類不能例項化

驗證如下:

2:抽象類可以包含抽象方法和抽象訪問器

驗證**如下:

//抽象方法

public abstract void run();

//抽象訪問器

public abstract string name

3:不能用 sealed 關鍵字修飾抽象類

通常情況下,我們會把抽象類視為公共基類,如果使用了sealed 修飾符,這意味著抽象類將不能被繼承

驗證如下:

4:從抽象類派生的非抽象類,必須包括繼承的所有抽象方法和抽象訪問器的實現

驗證如下:

乙個抽象方法通俗易懂的說就是乙個沒有方法體的方法。它有以下特性

1):抽象方法是隱式的虛方法。

2):只允許在抽象類使用抽象方法宣告。

3):因為抽象方法宣告不提供實際的實現,所有沒有方法體。方法宣告只是以乙個分號結束,並且在簽名後沒有大括號,實現由乙個重寫方法提供,此重寫方法是非抽象類的成員。

4):在抽象方法宣告中使用static或virtual修飾符是錯誤的。

5):除了在宣告和呼叫語法上不同外,抽象屬性的行為與抽象方法一樣。

6):在靜態屬性上使用abstract修飾符是錯誤的。

7):在派生類中,通過包括使用 override 修飾符的屬性宣告,可以重寫抽象的繼承屬性。

下面兩種抽象方法的寫法都是可以的

//抽象方法

public abstract void run();

abstract public void stop();

只不過將 abstract 放到訪問修飾符前面時會提示你「修飾符宣告順序不一致」,但這樣寫也沒錯,只不過我喜歡第一種寫法,看著舒服。

另外,抽象方法不能設定為私有的(因為抽象方法寫出來就是為了子類繼承實現的)

驗證如下

有抽象方法的類必然是抽象類,

但是,抽象類中的方法並不一定都是抽象方法。

相同點:

都可以繼承其它的類或者介面,也可以派生子類,並且都有具體的方法;

不同點:

抽象類中有抽象方法,一般類中沒有;

抽象類不可以例項化,一般類卻可以;

當然,概念畢竟只是概念,只能讓我們簡單的認識抽象類及抽象方法,拿例子分析會更好點,所以這裡我補充了一篇 c# 抽象類的簡單實現 的部落格,希望可以幫到你

什麼是抽象類?什麼是抽象方法?

抽象類 抽象類就是不能使用new方法進行例項化的類,即沒有具體例項物件的類,抽象類有點類似於 模板 的作用,目的是根據其格式來建立和修改新的類,物件不能由抽象類直接建立,只可以通過抽象類派生出新的子類,再由其子類來建立物件,當乙個類被宣告為抽象類時,要在這個類前面加上修飾符abstract,在抽象類...

什麼是抽象類

1.抽象類的定義 抽象就是從多個事物中將共性的,本質的內容抽取出來。2.抽象方法的由來 多個物件都具備相同的功能,但是功能具體內容有所不同,那麼在抽取過程中,只抽取了功能定義,並未抽取功能主體,那麼只有功能宣告,沒有功能主體的方法稱為抽象方法。2.1例子 例如 狼和狗都有吼叫的方法,可是吼叫內容是不...

C 抽象類 抽象屬性 抽象方法

抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。下面我們以水果為例,首先定義抽象類fruit,抽象類中有公共屬性vendor,抽象屬性price和抽象方法growinarea,1 public abstract class fruit...