繼承
虛方法 (重寫)
virtual 虛方法的關鍵字 ?
override 重寫的關鍵字?
練習:
繼承
繼承:很多類有相似的數據 ?相同的屬性 相同的方法 ?也有不同的 ?這個時候就可以使用繼承 讓多個類去繼承自某個具有相同數據的基類(父類) 這樣在子類中就不用再定義這些相同的數據了
優點:便于維護代碼 數據相同的類 只要需要在基類(父類)中定義即可 然后讓擁有相同數據的派生類(子類)去繼承這個父類就可以了 ? 后期修改數據的時候 只需要修改父類中的定義就可以了
多重繼承(多繼承): 可以有多個基類 每個子類都可以選擇繼承哪個基類 但是不能同時繼承多個基類 ?c# 是不支持多重繼承的 ?如果要完成這種模式 使用接口接口?
//定義一個基類(父類) internal class Boss {public int HP { get; set; }public int SP { get; set; }public void Move(){Console.WriteLine("移動");}public void BossAi(){Console.WriteLine("大招");} }
//實現繼承: ( : Boss )這樣就代表了 當前這個Class1這個類 繼承了 Boss類 //Boos就是基類(父類) Class1就是派生類(子類) 父類中的數據成員 方法成員 在子類中也可以使用internal class Class1 : Boss {//以下注釋部分可以省略,因為在父類Boss中已經存在//public int HP { get; set; }//public int SP { get; set; }//public void Move()//{// Console.WriteLine("移動");//}//public void Ai()//{// Console.WriteLine("普攻");//}// 小兵 自己的數據public double Heigth { get; set; }public void minAi(){Console.WriteLine("Min攻擊");}}
//Class2繼承Class1 internal class Class2 :Class1 {}
static void Main(string[] args) {Boss b = new Boss();b.HP = 100;b.SP = 100;Class1 c1 = new Class1();c1.HP = 100;//Class1 繼承Boss類之后的操作 第一個繼承Boss的子類Class1 c2 = new Class1();c2.HP = 100;Console.WriteLine(c2.HP);c2.Move();c2.minAi();//Class2 第一個繼承Class1的子類,第二個繼承Boss的子類Class2 c3 = new Class2();c3.Move();c3.HP = 100;Console.WriteLine(c3.HP);c3.BossAi();c3.minAi(); }
虛方法 (重寫)
virtual 虛方法的關鍵字 ?
?將方法升級為虛方法 ?然后就可以在子類中重寫邏輯了 ?在子類中重寫之后 就屬于子類的邏? 輯 ?父類中的不會改變
internal class Boss {public int HP { get; set; }public int SP { get; set; } public virtual void Move(){Console.WriteLine("Boss只能左右移動");}public void AI(){Console.WriteLine("大招");} }
override 重寫的關鍵字?
如果想要重寫父類中的某個方法邏輯 那么父類中的方法就可以升級為虛方法 ?然后在子類中對其進行重寫。如果父類中的方法沒有聲明為虛方法 子類就不能重寫
internal class Class1 :Boss {public override void Move(){Console.WriteLine("小怪隨意移動");}//隱藏方法public new void AI(){Console.WriteLine("普通攻擊");} }
static void Main(string[] args){Class1 c1 = new Class1();//子類中重新父類Move方法之后的方法c1.Move();}
練習:
現在 有 火車 ?飛機 ?輪船 汽車 幾個類 ?屬性有: ?價格 速度 核載人數 ?方法有: 運行方式 ?到站方式 運用繼承與虛方法 重寫的形式 將它們各自的狀態 完善
static void Main(string[] args){Car a = new Car();steamship b=new steamship();plane c=new plane();a.Price = 20; a.Speed = 60; a.Peoplenum = 5;a.Run (); a.Stop (); a.show ();b.Price = 2000; b.Speed = 1000; b.Peoplenum = 50;b.Run(); b.Stop(); b.show();c.Price = 1000; c.Speed = 800; c.Peoplenum = 100;c.Run(); c.Stop(); c.show();}
//定義一個交通工具的基類 internal class vehicle {public int Price { get; set; }public int Speed { get; set; }public int Peoplenum { get; set; }public virtual void Run() { }public virtual void Stop() { }public void show() { Console.WriteLine($"價格:{Price} 速度:{Speed} 核載人數:{Peoplenum}"); }}
//汽車 internal class Car : vehicle {public override void Run() { Console.WriteLine("起步"); }public override void Stop() { Console.WriteLine("熄火"); }}
//輪船internal class steamship : vehicle{public override void Run() { Console.WriteLine("漂流"); }public override void Stop() { Console.WriteLine("拋錨"); }}
//飛機internal class plane: vehicle{public override void Run() { Console.WriteLine("飛行"); }public override void Stop() { Console.WriteLine("降落"); }}