摘要:物件導向系列菜單5-『物件導向特性-繼承(Inheritance)4-abstract』
方唐鏡:包大人~
包大人:你那位?
方唐鏡:我方唐鏡三個字都沒聽過,好大的官威啊
包大人:有屁快放!~
方唐鏡:有位官爺的『高級轎子』,就是買來給兒子繼承的要著麼處置呢~請包…包~大人告訴我。
包大人:就…呃…反正會幫你處置,不要問! 很恐怖的!
正文開始
本文討論主題為
1.『類別的東西就是只能繼承不能用的,這麼做呢?』
2.『抽象方法的使用』
『類別的東西就是只能繼承不能用的,這麼做呢?』
Step1. 使用修飾詞『abstract』
在類別宣告裡,只能將它當「基底類別 Base Class」。被標記的類別無法實作。
在Class Car 前增加『abstract』,該類別只能繼承、不能實作。
//父類別
//增加『abstract』修飾詞,讓該類別只能繼承。不能實作。
public abstract class Car
{
//車子的速度
protected string Speed;
//車子的顏色
protected string Color;
// 定義建構子,預設Speed為50,Color為Blue
public Car()
{
Speed = "50";
Color = "Blue";
}
//定義車子移動的方法。
public string DriveCar(string a)
{
return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" ;
}
}
如果要實體化該類別就會出錯。
注意
抽象類別的特性
1.抽象類別不能實體化。
2.抽象類別可能包含抽象方法與存取子。
3.無法使用『Sealed』修飾詞,因為兩個意思完全相反。
4.衍生自抽象類別的非抽象類別必須包含所有繼承抽象方法和存取子的實作。
『抽象方法的使用』
抽象方法只能存在於抽象類別中。不然會出錯喔。
//父類別
//增加『abstract』修飾詞,讓該類別只能繼承。不能實作。
public abstract class Car
{
//車子的速度
protected string Speed;
//車子的顏色
protected string Color;
// 定義建構子,預設Speed為50,Color為Blue
public Car()
{
Speed = "50";
Color = "Blue";
}
//定義車子移動的方法。
//抽象方法宣告,沒有提供實際的實作,因此並沒有方法主題。
//抽象方法只能存在於抽象類別中。
public abstract string DriveCar();
}
子類別,使用Overried,來進行抽象類別覆寫。
// 子類別繼承Car
public class BMWCar :Car
{
//BMWCar類別建構子
public BMWCar()
{
Speed = "BMW500";
Color = "BWM_Red";
}
//BMW的屬性引擎
public string BMWPower;
//定義車子移動的方法
//使用存取修飾詞Overried,來進行抽象類別覆寫方法提供自已實作。
public override string DriveCar()
{
return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" + "『Override』" + "String--" ;
}
}
4.在抽象方法宣告『static』與『virtual』修飾詞會出錯。
參考資料