C# 中的繼承、多型 extends implements
這類的資料google一下就會有,或著買本書參考一下亦可
我試著用最簡單方法來說明
良好的程式,應該要有良好的結構
用動物園舉例比較容易懂
一、動物園裡,所有動物都有名字,會動、吃、叫
每個動物都會寫一次,一不小心其中某動物忘了寫「名字」的方法
也挺困擾的
寫抽像類別 Animal.cs 給各種動物去實作
讓各種動物去繼承
二、有的動物會飛,有的動物會跑
不會飛的動物,不需要實作「飛」這個方法
寫個介面 IBirdAbility.cs 給會飛的動物去實作
以上是說明及目的。
步驟:
一、開啟專案,新增Animals的資料夾
二、結構大至如下圖:
三、其中Animal.cs 是抽象類別,Air中的IBirdAbility.cs 是介面
Land及Air中的各方法皆繼承animail.cs
唯有Eagle實作了IBirdAbility的方法
四、在Form1裡測試
程式碼:
Animal.cs
Dog.cs,cat及horse都差不多這樣
IBirdAbility.cs 介面方法
Eagle.cs
在主程式中調用以上的方法
我試著用最簡單方法來說明
良好的程式,應該要有良好的結構
用動物園舉例比較容易懂
一、動物園裡,所有動物都有名字,會動、吃、叫
每個動物都會寫一次,一不小心其中某動物忘了寫「名字」的方法
也挺困擾的
寫抽像類別 Animal.cs 給各種動物去實作
讓各種動物去繼承
二、有的動物會飛,有的動物會跑
不會飛的動物,不需要實作「飛」這個方法
寫個介面 IBirdAbility.cs 給會飛的動物去實作
以上是說明及目的。
步驟:
一、開啟專案,新增Animals的資料夾
二、結構大至如下圖:
三、其中Animal.cs 是抽象類別,Air中的IBirdAbility.cs 是介面
Land及Air中的各方法皆繼承animail.cs
唯有Eagle實作了IBirdAbility的方法
四、在Form1裡測試
程式碼:
Animal.cs
abstract class Animal { /* public String Name { get; set; } public String Color { get; } public String Type { get; } */ private String name; public String Name { get { return this.name; } set { this.name = value; } } private String color; public String Color{get { return this.color; } } private String type; public String Type { get { return this.type; } } public Animal(String Type, String Name, String Color) { this.type = Type; this.name = Name; this.color = Color; } abstract public String Sound(); abstract public String Eat(); abstract public String Move(); public override string ToString() { String result = ""; result += String.Format("{0} 的名字為:{1}\r\n", this.type, this.name); result += String.Format("{0} 的顏色為:{1}\r\n", this.name, this.color); result += String.Format("{0} 的聲音為:{1}\r\n", this.name, this.Sound()); result += String.Format("{0} 的吃:{1}\r\n", this.name, this.Eat()); result += String.Format("{0} 的動作:{1}\r\n", this.name, this.Move()); return result; } }
Dog.cs,cat及horse都差不多這樣
class Dog : Animal { //Dog繼承Animal,另外的cat.cs及horse.cs都一樣 //建構子,其中的name及color由使用者賦予 public Dog(String name, String color) : base("狗狗", name, color) { } //實作Sound()等各方法,注意override public override String Sound() { return "汪!汪!汪!"; } public override String Eat() { return "肉肉!骨頭!"; } public override String Move() { return "四隻腳,跑跑跳跳!"; } }
IBirdAbility.cs 介面方法
interface IBirdAbility { String Fly(); }
Eagle.cs
class Eagle : Animal, IBirdAbility { //Eagle 繼承了 Animal 實作 IBirdAbility(注意,可以多個實作,但繼承只有一個) public Eagle(String name) : base("老鷹", name, "褐白") { } public override string Sound() { return "啾啾啾"; } public override string Eat() { return "小動物!"; } public override string Move() { return "兩隻腳地上慢慢走!"; } public string Fly() { return "飛得很快!飛得很高!"; } public override string ToString() { String result = base.ToString(); result += String.Format("{0} 的飛:{1}\r\n", this.Name, this.Fly()); return result; } }
在主程式中調用以上的方法
private void button1_Click(object sender, EventArgs e) { String result = ""; //Animals.Animal aa = new Animals.Animal("動物的種類","動物","顏色"); //result += aa.ToString() + "\r\n"; Dog dd = new Dog("小黃","黃"); result += dd.ToString() + "\r\n"; Cat cc = new Cat("小咪", "白"); result += cc.ToString() + "\r\n"; Horse hh = new Horse("小馬", "黑"); result += hh.ToString() + "\r\n"; Eagle ee = new Eagle("小鷹"); result += ee.ToString() + "\r\n"; textBox1.Text = result; }
留言
張貼留言