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