物件導向 抽象類與抽象方法

2021-10-04 22:53:32 字數 1906 閱讀 9802

如果乙個類不與具體的食物相聯絡,而只表達一種抽象的概念,僅是作為其派生類的乙個基類,這樣的類就是派生類,在抽象類中,宣告抽象類中宣告抽象方法是,如果加上abstract關鍵字則為抽象方法。abstract 修飾符可用於類、方法、屬性、索引器和事件。

在類宣告中使用abstract 修飾符以指示某個類只能是其他類的基類。

標記為抽象或包含在抽象類中的成員必須通過從抽象類派生的類來實現。

通過在類定義前面放置關鍵字 abstract,可以將類宣告為抽象類。例如:

public abstract class a

抽象類的用途是提供多個派生類可共享的基類的公共定義。

抽象類具有以下特性:

抽象類必須為所有介面成員提供實現。

實現介面的抽象類可以將介面方法對映到抽象方法上。例如:

inte***ce i

abstract class c : i

抽象方法是隱式的虛方法。

由重寫方法override提供實現,此重寫方法是非抽象類的乙個成員。

只允許在抽象類中使用抽象方法宣告。

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

當抽象類從基類繼承虛方法時,抽象類可以使用抽象方法重寫該虛方法。例如:

public class d 

}public abstract class e : d

public class f : e  

}如果將 virtual 方法宣告為 abstract,則該方法對於從抽象類繼承的所有類而言仍然是虛方法。

繼承抽象方法的類不能訪問該方法的原始實現。

在上例中,類f 的dowork不能呼叫類d中的dowork。通過這種方式,抽象類可以強制派生類為虛方法提供新的方法實現。除了在宣告和呼叫語法上不同外,抽象屬性的行為與抽象方法一樣。在靜態屬性上使用 abstract 修飾符是錯誤的。

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

例:自定義抽象類計算圓形面積

public partial class form1 : form

private void button1_click(object sender, eventargs e)

catch}}

}public abstract class roll

set  }

public abstract double area();// 抽象方法,用來計算圓面積

}public class calcarea : roll//繼承抽象類

}虛擬方法和抽象方法有什麼區別?

抽象方法只有宣告沒有實現,需要在子類中實現;虛擬方法有宣告和實現,並且可以在子類中覆蓋,也可以不覆蓋使用父類的預設實現

虛擬方法有實現**,抽象方法則沒有

並且抽象類不能被例項化,只能例項化實現了全部抽象方法的派生類

抽象方法是虛擬方法的一種

抽象方法沒有實現,它的存在只是為派生類統一介面;派生類應該實現這個方法

如果編寫乙個基類,它永遠不會被實現,那麼就應該將這個類中的乙個或多個方法定義為

抽象方法。

抽象方法只存在於抽象類中,有抽象方法的類必須定義為抽象類

其實大家首先要搞清楚,虛方法與多型性關係密切,虛方法允許派生類完全或部分重寫該類的方法,需寫方法體。抽象類中可以包含抽象方法與一般的方法,抽象類不可以

new,

抽象方法只是乙個定義,沒有方法體,也就是沒有

{},也不要在裡面寫內容。它們兩個相像的一點是都用

override重寫

Python 物件導向 抽象類和抽象方法

乙個抽象出來的類,並不是某乙個具體的類,不能直接建立例項的類,建立會報錯 抽象出來的乙個方法,不具備具體實現,不能直接呼叫,子類不實現會報錯 無法直接支援,需要借助乙個模組 import abc 設定類的元類為 abc.abcmeta 使用裝飾器修飾抽象方法 abc.abstractmethod i...

物件導向 抽象類

抽象 裡邊有未明確的東西。抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件,因為呼叫抽象方法沒意義。4 抽象類中的抽象方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類物件呼叫。如果子類只覆蓋部分抽象方法,那麼該...

物件導向 抽象類

抽象類概述 什麼是抽象類?什麼是抽象方法?抽象方法 沒有方法體的方法就是抽象方法,必須用abstract關鍵字去修飾。抽象類 擁有抽象方法的類,就是抽象類。應用場景 在不同的子類往上抽取方法時,方法的定義是一樣的,但是方法體不一樣,所以抽取到父類時就可以使用抽象方法。簡單來說 當多個子類擁有同乙個功...