C#中簡單的繼承和多態
今天我們來聊一聊繼承,說實話今天也是我第一次接觸。
繼承的概念是什麽呢?就是一個類可以繼承另一個類的屬性和方法(成員)
繼承是面向對象編程中的一個非常重要的特性。
好了,廢話不多說,下面切入正題:
1.首先我們定義一個子類,給它創建兩個構造:一個無參構造和一個有參構造
定義一個枚舉類
在定義的子類中它有自己獨有的屬性:
在定義的父類中的屬性和構造:
在Main方法中:
同時要註意,在調用子類的帶參構造時,我們要想到調用子類構造的時候,沒有使用base關鍵字調用父類的指定的構造,默認調用父類的無參構造.
補充一下:
01.base代表父類對象,如果base():調用父類的構造函數
02.base代表的是方法調用,是不需要參數類型的
03.base(傳參順序和父類構造一致,變量名和子類構造參數一致)
2.在這裏補充一點訪問修飾符
我們所知道的:public private protected
下面我畫一個圖來簡單的描述一下(√表示可以,×表示不可以)
當前類 子類 其他類(Program)
private √ × ×
protected √ √ ×
public √ √ √
總結:我們可以清晰的明白三種訪問修飾符對類成員的訪問限制強度:private>protected>public
3.new 子類底層原理圖
我簡單的用一個圖來描述一下:
用文字描述:
1.走到子類構造,不進入構造體
2.轉向父類,進入父類構造體執行
3.轉回子類構造,執行子類構造體
4.轉到Main,內存中構建出子類對象
4.繼承還具有兩大特性這個我們也不要忘記了,就是單根性和傳遞性
單根性指的就是一個子類只有一個父類
傳遞性就是只要跟父類有繼承關系,就可以使用父類的屬性和方法
接下來我們講一講多態
1.多態是什麽呢?字面上的意思就是多種形態
用專業一點的話來說就是指同一個操作作用於不同的對象時,可以有不同的解釋,產生不同的執行效果。
我們所接觸的方法重載也是多態的一種方式。
如何實現多態呢?不要急下面我來解說
(1)實現方法的重寫
在父類中定義的方法,用virtual關鍵字來定義為虛方法
在子類中定義自己的方法,用override關鍵字來修飾,實現對父類的方法的重寫
(2)定義父類變量,用子類變量初始化父類變量
是不是覺得抽象,其實我剛開始學習時也是一樣的,下面來一個小案例:
//創建一個Person父類
public class Person
{
public virtual void SayHello()
{
//父類特有的方法
Console.WriteLine("父類打招呼方法");
}
}
//創建一個Korea子類
public class Korea:Person //在這裏要註意它繼承於Person類
{
public override void SayHello()
{
Console.WriteLine("金喜善打招呼方法");
}
}
//創建一個Chinese類
public class Chinese:Person //在這裏要註意它繼承於Person類
{
public override void SayHello()
{
Console.WriteLine("你好!");
}
}
//創建一個American類
public class American:Person //在這裏要註意它繼承於Person類
{
public override void SayHello()
{
Console.WriteLine("Hello");
}
}
前面我們也學過泛型了下面我們就用泛型來存儲
List<Person> list=new List<Person>();
Chinese chinese=new Chinese();
American usa=new American();
Korea korea=new Korea();
list.Add(chinese);
list.Add(usa);
list.Add(korea);
下面我們可以用foreach來遍歷
方式一:
foreach (Person person in list)
{
person.SayHello();
}
方式二:
foreach (Person person in list)
{
//方式二:不使用統一調用
if (person is Chinese)
{
Chinese chinese= person as Chinese;
chinese.SayHello();
}
if (person is Korea)
{
Korea chinese= person as Korea;
korea.SayHello();
}
if (person is American)
{
American chinese= person as American;
american.SayHello();
}
}
下面我再穿插個示例:
在Main方法中調用
上面的兩種遍歷你看明白了麽?不明白也不要緊,之後的bolg中我們還會講解
好了,我就講到這裏吧,我也是個初學者,只是把老師講的和自己理解的用文字表述出來了,這是對我自己的一種成長!
C#中簡單的繼承和多態