一 抽象類 描述一個事物,由於沒有足夠的信息,這時就將這個事物稱為抽象事物。abstract為抽象關鍵字,被其聲明的類稱為抽象類,其聲明的方法稱為抽象方法。 抽象屬性聲明不提供屬性訪問器的實現,它只聲明該類支持的屬性,而訪問器的實現留給派生類。 抽象方法聲明不提供方法的實現,他必須是一個空方法,而將 ...
一 抽象類
描述一個事物,由於沒有足夠的信息,這時就將這個事物稱為抽象事物。abstract為抽象關鍵字,被其聲明的類稱為抽象類,其聲明的方法稱為抽象方法。
抽象屬性聲明不提供屬性訪問器的實現,它只聲明該類支持的屬性,而訪問器的實現留給派生類。
抽象方法聲明不提供方法的實現,他必須是一個空方法,而將方法實現留給派生類。派生類必須重載抽象基類的抽象方法。
抽象類是用來作為基類的,不能直接實例化,即不能用抽象類去創建對象。抽象類的用途是提供多個派生類可共用的基類公共定義。抽象類特點:
- 抽象類用abstract聲明,不能被實例化(不能new)。
- 只有當子類覆蓋了所有的抽象方法後,子類才可以創建對象,如果沒有覆蓋所有抽象方法,那麼子類還是一個抽象類。
- 抽象類也是不斷向上抽取而來的,抽取了方法聲明兒不確定具體的方法內容。由不同的子類完成具體的方法。
- 抽象類可以包含抽象的成員,如抽象屬性和抽象方法,也可以包含非抽象的成員,甚至還可以包含虛方法。註意:沒有抽象欄位,欄位是不可以抽象的。
二 幾個關於抽象類的問題
1.抽象類中有構造函數嗎?
有。抽象類的構造函數雖然不能給抽象類對象實例化,因為抽象類不能創建對象,但是抽象類有子類,抽象類的構造函數可以用於子類對象實例化。
2.抽象類一定是個父類嗎?
是的。必須需要子類覆蓋抽象方法才能實例化,使用這些方法。
3. 抽象類中可以不定義抽象方法嗎?
可以的。
4. 抽象關鍵字abstract和哪些關鍵字不能共存?
sealed,private,static.一是因為抽象類不能是密封或者靜態的。二是因為虛擬成員和抽象成員不能私有
三 抽象類與介面的區別
- C#支持單繼承,不直接支持多繼承(介面可以多繼承)。它們的派生類只能繼承一個抽象類,但是可以實現多個介面。即單繼承,多實現。
- 抽象類中可以包含欄位,構造函數,析構函數,靜態成員或者常量等,但是介面中不可以。
- 抽象類中可以定義非抽象成員的實現,但是介面中不能定義任何實現。
- 抽象類中的成員可以私有的(只要是不抽象的),受保護的,內部的或者受保護的內部成員,但是介面中的成員必須是公共的。
備註:關於介面的內容請看“第6篇 介面”