1. 程式人生 > >C#中簡單的繼承和多態

C#中簡單的繼承和多態

補充 是個 main ase ide 初始化 子類 public 泛型

今天我們來聊一聊繼承,說實話今天也是我第一次接觸。

繼承的概念是什麽呢?就是一個類可以繼承另一個類的屬性和方法(成員)

繼承是面向對象編程中的一個非常重要的特性。

好了,廢話不多說,下面切入正題:

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#中簡單的繼承和多態