本節內容很多,視頻檔也超過了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 存取僅限於包含類型。
下面我們看個例題,還是說人這個話題吧
全部程式碼見評論!!