本節內容很多,視頻文件也超過了4M ,所以下載時間大概會長了那么一小點,還請多等下!!
這節課的內容很多,因為單繼承的內容就很多了,我又順便把前面的東西都用上了,算是復習,類這節有的東西都是翻來倒去的講兩三次,目的是希望大家掌握好,這可是重中只重?。?!本節復習內容中不太清楚的麻煩去看下前面相關章節!!
下面我們講繼承,要了解繼承我們先得知道為什么需要繼承?
假設我們的為新聞系統制作的一個類里面已經具備了數據庫連接,初始化,并且有了查詢、增、刪、改等功能!
那接下來我們肯定要做一些不同的查詢、修改等,例如新聞欄目和用戶管理這兩個相同的是都需要使用到前面我們說的類,但是不同的是他們所要結果又各不相同。怎么辦?有兩種辦法,一是為他們分別創建類,把數據庫連接類的東西復制兩次,這樣做的缺點我想不用多說了吧,那么我們還可以頻繁的調用數據庫類的成員來達到目的,可這樣下來,我們的代碼豈不是很臃腫了?知道減肥藥為什么那么好賣嗎?
郁悶,那怎么辦呢?簡單,我們用繼承來完成,簡單形容下繼承吧,他呢就是 子類(派生類)擁有 父類(基類)的全部特性,同時又有自己的特色。我想這樣說應該還是算明白了吧!
注意:.Net的繼承只允許直接從另一個類中繼承,不能同時繼承多個類,好像說只能有一個老爹(其實這也不絕對,哈哈想下微軟真的很有意思,我們還可以使用接口實現多重繼承),但是可以多層次的繼承,例如可以上有老爹,還有爺爺,下有兒子,孫子。
下面我們看個直觀點的東西
我們看上圖就會發現,越下層的越具體.那么我們就可以理解為人是所有類的基類(父類),而下面的則都為派生類(子類).事實上我們下面的子類又可以向下延伸.
C#中,派生類從它的直接基類中繼承成員:方法、域、屬性、事件、索引指示器。除了構造函數和析構函數,派生類隱式地繼承了直接基類的所有成員。
二、C#中的繼承符合下列規則:
(這個不是我總結的,我去網上粘人家寫現成的.呵呵!!)
1、繼承是可傳遞的。如果C從B中派生,B又從A中派生,那么C不僅繼承了B中聲明的成員,同樣也繼承了A中的成員。Object 類作為所有類的基類。
2、派生類應當是對基類的擴展。派生類可以添加新的成員,但不能除去已經繼承的成員的定義。
3、構造函數和析構函數不能被繼承。除此以外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定派生類能否訪問它們。
4、派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這并不因為這派生類刪除了這些成員,只是不能再訪問這些成員。(這點需要注意的是,如果是屬性或者方法同名,但是簽名不同,那就不是覆寫,而是重載了)
5、類可以定義虛方法、虛屬性以及虛索引指示器,它的派生類能夠重載這些成員,從而實現類可以展示出多態性。
6、派生類只能從一個類中繼承,可以通過接口實現多重繼承。
在子類中我們可以通過base 關鍵字訪問基類的成員:
調用基類上已被其他方法重寫的方法。
指定創建派生類實例時應調用的基類構造函數。
基類訪問只能在構造函數、實例方法或實例屬性訪問器中進行。
從靜態方法中使用 base 關鍵字是錯誤的。
再重溫下訪問修飾符
訪問修飾符是一些關鍵字,用于指定聲明的成員或類型的可訪問性。類的繼承中有四個訪問修飾符: public PRotected internal private。使用這些訪問修飾符可指定下列五個可訪問性級別: public protected internal internal protected private。
聲明的可訪問性 意義
public 訪問不受限制。
protected 訪問僅限于包含類或從包含類派生的類型。
internal 訪問僅限于當前項目。
protected internal 訪問僅限于從包含類派生的當前項目或類型。
private 訪問僅限于包含類型。
下面我們看個例題,還是說人這個話題吧
全部代碼見評論!!
新聞熱點
疑難解答