C#forUnity快速入門(連載6)-C#繼承性

 C# for Unity 編程語言快速入門教程(連載6)---C#OOP編程之繼承性

 

   C#的OOP編程之繼承性,其本質就是通過繼承讓子類減少重複代碼的編寫,達到優化代碼的作用。繼承具體指“字段”與“方法”的繼承,筆者梳理本階段的知識點如下所示。


1: 概念(基類、派生類)

    生活中有"龍生龍,鳳生鳳,老鼠天生會打洞",這說的是日常生活中的“繼承"現象。類似情形“國民老公--"王思聰"生來就是超級富二代,而一般農民工的子女則相對窮好幾個數量級。

    我們C#語言中的繼承,通過":"(冒號)來定義繼承關係。(類似Java語言的extend關鍵字)

   

2: 使用base,this關鍵字

    base 關鍵字代表父類對象,this關鍵字代表本類對象(this可以默認不寫)。


3: 方法覆蓋
   使用 new 關鍵字顯示聲明發生方法覆蓋。

4: 繼承關係中構造函數的應用.
   4.1>先執行父類的構造方法,再執行子類構造方法。
   4.2>作爲良好的編程習慣:
        派生類的構造函數在執行初始化時,最好調用基類的構造函數。如果不在派生類顯示調用一個基類構造函數,編譯器會自動插入對基類的默認構造函數的調用,然後才調用執行派生類構造函數的代碼。

5: 類的賦值
     子類對象可以賦值給父類對象,但使用中只能使用父類定義的方法。


  爲了讓初學者更好的學會繼承的理論,現提供如下編程題目,供練習使用。


1:  已知交通工具類定義如下。
class Vehicle{
   private int _length;     //長度
   private int _width;      //寬度
   public void Drive(){};  //駕駛方法
}
要求:(1)實現這個類;(2)定義並實現一個小車類car,是它的派生類,小車本身的私有屬性有載人數,小車的方法有init(設置車輪數、重量和載人數),get passenger(獲取載人數),print(打印車輪數、重量和載人數)。


2: 編寫一個學生和教師的數據輸入和顯示程序,學生數據有編號、姓名、班號和成績,教師數據有編號、姓名、職稱和部門。
   要求將編號、姓名輸入和顯示設計成一個類person,並作爲學生數據操作類student和教師數據操作類teacher的基類。


3: 定義如下類,編程完成要求的功能。

   1) 定義一個名稱爲 Vehicle(車輛)類,
         字段定義如下:
         public string clour="while";    //顏色字段
         protected float speed;           //速度字段
         方法如下:
         public void accelerate(){.....}; //加速方法

   2) 定義一個名稱爲 Car (機動車)類
         字段如下:
         private int price;               //價格字段
         方法如下:
         public void decelerate(){.....}; //減速方法

   3) 編程要求:
       3.1) 把Vehicle 作爲父類,Car 作爲子類。
       3.2) 在Car 類的main方法中調用顯示如下字段: clour, speed, price
       3.3) 在Car 類的main方法中調用顯示方法: accelerate(), decelerate().
       3.4) 在Car 類中定義新的字段
              string clour="red";    //顏色字段
              再次運行Car類,記下字段 clour 的運行結果有什麼變化? 說明這種現象的原因?
       3.5) 在Car 類中定義新的方法
             public void accelerate(....); //加速方法
                 再次運行Car類,記下方法 accelerate()的運行結果有什麼變化? 說明這種現象的原因?

       3.6)  在Car 類的decelerate() 中使用this 關鍵字調用本類的accelerate()方法。
               在Car 類的decelerate() 中使用base關鍵字調用父類的accelerate()方法。
               運行程序,解釋輸出結果。

       3.7)  分別在Vehicle 類,Car類中定義構造方法。
               再次運行程序,解釋輸出結果。
       
       3.8) 刪除Vehicle 原無參構造函數,爲 Vehicle 類定義有參構造方法 Vehicle(float mySpeed) ,
                作用:在構造函數中給 speed 字段賦值。 請問如何處理,使得子類代碼可以正常運行,
                解釋此現象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章