C#核心開發-第15單元-接口和繼承-第1節:繼承
1. 繼承
現實生活當中,存在很多與繼承相關的現象,如下圖所示:
圖1說明如下:
(1). 父子關係是最容易理解的,子繼承父親的家產,也就是父親的錢成了兒子的錢了,兒子可以使用父親的錢。
(2). 汽車是個大分類,所有轎車和SUV都具有汽車的特徵,如4個輪子,2個後視鏡,1個方向盤。
(3). 轎車和SUV再向下分類,細分到具體的車型。
(4). 車型還可以繼續向下分類。
(5). 轎車和SUV都具有汽車的特徵,但汽車不一定具備轎車和SUV的特徵。
在C#中,可以簡單地將繼承理解為:大分類和小分類之間存在的關係,小分類具有大分類所有的特徵,但大分類不一定具備所有小分類的特徵。
將現實生活當中的繼承與C#語言中的繼承對應起來就是:指一個對象(轎車)直接使用另一對象(汽車)的屬性和方法。
2. 基類
在C#中,基類就是被繼承的類,也可以理解為父類,一個父類可以有多個子類。
C#基類就是汽車,而轎車/SUV/寶馬X3/蒙迪歐等都是子類,是相對存在的。
基類的定義,與普通類是一樣的,當它還沒有被繼承時,就是一個普通類。
如下C#代碼定義的基類:
定義C#基類的代碼如下:
namespace Yidosoft.Edu.Csharp.Inherit{///<summary>/// 基類:人類///</summary>publicclassPerson{}}
在圖2中,我們規劃的是Person為基類,將來要被其它子類繼承的,所以稱為基類,任何類都可以稱為基類。
現在我們為C#基類Person添加一些公有的屬性:
在C#基類中編寫如下屬性:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace Yidosoft.Edu.Csharp.Inherit{///<summary>/// 基類:人類///</summary>publicclassPerson{//姓名protectedstring Name { get; set; }//年齡publicint Age { get; set; }//性別publicbool Sex { get; set; }}}
在圖3中,為Person類添加了3個屬性,這3個屬性是所有人都具有的特徵。
根據業務需求,我們要將公共有屬性/方法等抽出來編寫在基類中,以達到相同功能公用,以達到共享的目的。
3. 派生類
C#派生類是與基類相對應的,也稱為子類,子類與父類相對應,只是叫法不一樣而已,微軟官方的叫法是基類與派生類。
C#派生類是要繼承基類的,派生類也是一個普通類,但只要繼承了基類,就變成了派生類。
下面創建一個Student類,繼承Person基類:
C#子類繼承基類代碼如下:
namespace Yidosoft.Edu.Csharp.Inherit{///<summary>/// 派生類:學生類///</summary>publicclassStudent : Person{}}
在C#中,派生類繼承基類說明如下:
(1). 使用英文的冒號:實現繼承關係,冒號後面的是基類,前面的是子類。
(2). 一個派生類只能繼承一個基類,但可以繼承多個接口(後面會講)。
(3). 一個基類可以被多個子類繼承。
(4). 使用繼承可以提高代碼的復用率。
在圖4中,Person是基類(父類),Student是派生類(子類),通過冒號實現它們之間的繼承關係。