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;
}


留言
張貼留言