第六章:继承和多态
一:本章目標
①:理解繼承的概念
②:使用繼承建立父類和子類以及繼承的傳遞性、單根性
③:訪問修飾符
④:多態的概念
⑤:會使用虛方法實現多態
?
二:所謂繼承:
在C#中,如果一個類后面通過冒號又跟了另外一個類,那么我們就稱冒號前面的類為子類,冒號后面的類為父類。這種書寫類的方式放映出來的關系就稱為類的繼承關系。
?
1、子類:派生類
父類:基類或者超類
2、滿足什么條件的類可以使用繼承??
滿足is a關系的兩個類可以使用繼承。
例如:
?
? ? ?經理is a a?員工
?
?????程序員 ?is a?員工
?
?????學生?is ?a Person
?
繼承的優點:減少代碼冗余,實現代碼復用
?
☆繼承模式下子類構造,背后到底發生了什么???
eg:
創建出Animal(父類)、Dog(子類)
關鍵代碼如下:
父類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Chap06 {public class Animal{//定義自動屬性 年齡和姓名public int Age { get; set; }public string Name { get; set; }//無參構造public Animal(){ }//帶參構造public Animal(int age,string name){this.Age = age;this.Name = name;}} }子類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Chap06 {public class Dog:Animal{public string Color{ get; set; }//無參構造public Dog(){ }//帶參構造public Dog(int age,string name,string color){this.Age = age;this.Name = name;this.Color = color;}public void Eat(){Console.WriteLine("Dog Eat Meat Very Happy!");}} }Main方法:
namespace Chap06 {class Program{static void Main(string[] args){//創建Dog對象Dog dog = new Dog();//調用子類中的Eat()方法dog.Eat();Console.ReadKey();}} }解析:
如果我們想構建一個子類對象...
1、進入子類構造方法名,但不進入子類構造的方法體
2、跳轉到父類構造方法名,接下來執行父類構造的方法體
3、父類方法體執行完畢,跳轉到子類方法體執行
4、子類方法體執行完畢,跳轉到Main函數,代表子類對象創建過程
?
?
注:繼承關系在類圖中表示為一個箭頭,箭頭指向的是父類。
子類可以繼承父類的非私有成員
一個子類只能有一個直接父類
子類構造默認會調用父類的無參構造
三:base關鍵字
解析:
①:父類的實例
②:看成是調用父類的構造,只出現在子類構造后面
③:base(參數列表)父類帶參構造的參數列表一致
④:相當于方法調用,不帶有數據類型
?
四:訪問修飾符
①:Public:任何位置都能訪問(方法,成員變量,類)
②:Private:只能當前類自身訪問,出了類所在{}無法訪問(方法,成員變量)
③:Protected:當前類和子類能訪問及子類的子類(孫子類)(方法以及變量)
④:Internal:只能在當前程序集中使用
三種訪問修飾符對類成員的訪問限制強度:Private>Protected>Public
五:繼承的特性:
①:傳遞性:
如果一個類B繼承自類A,而類C又繼承類B,那么類C也可以訪問到類A中非私有成員
?
②:單根性(C#不支持多繼承?Java也不支持多繼承)
?
?
六:繼承的價值
01.模擬現實世界的關系
02.便于重用和擴展已徹底測試的代碼,且無需修改
03.結構更清晰
七:實現多態
概念:
不同的對象對于同一個操作,做出的響應不同,那么這種情況在面向對象編程中就稱為多態。
使用多態的目的:
使用多態就是為了統一調用。
實現多態的方式:
①:通過虛方法:
實現多態的步驟:
01.在父類中通過virtual關鍵字定義一個虛方法
02.在子類中通過override關鍵字對父類中的虛方法進行重寫
03.調用的時候,調用的是子類的方法
?
Main方法進行創建對象以及遍歷集合:
namespace Chap06多態 {class Program{static void Main(string[] args){Chinese chinese = new Chinese();American american = new American();Korea korea = new Korea();Person[] p ={chinese,american,korea};//遍歷集合中的元素,調用對應子類中的Hello方法foreach (Person item in p){item.Hello();}Console.ReadLine();}}?
轉載于:https://www.cnblogs.com/hr1997/p/5378012.html
總結
- 上一篇: TextKit简单示例
- 下一篇: 组合查询(机房重构知识点总结)