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中我們還會講解

好了,我就講到這里吧,我也是個初學者,只是把老師講的和自己理解的用文字表述出來了,這是對我自己的一種成長!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM