物件導向系列菜單 5 -『 物件導向特性-繼承 ( Inheritance ) 4 - abstract 』
c井字號 物件導向
Lastmod: 2019-12-16

使用修飾詞abstract,限定類別只能被繼承

在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 + "』在移動" ;
        }

    }

抽像類別的特性

  • 抽象類別不能實體化。
  • 抽象類別可能包含抽象方法與存取子。
  • 無法使用『Sealed』修飾詞,因為兩個意思完全相反。
  • 衍生自抽象類別的非抽象類別必須包含所有繼承抽象方法和存取子的實作。

抽象方法的使用

抽象方法只能存在於抽象類別中。不然會出錯喔。

    //父類別
    //增加『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--" ;
        }
    }

抽象方法的特性

  • 抽象方法隱含是一種虛擬方法(但他無法擁有Virtual修飾詞)。
  • 抽象方法宣告只允許在抽象類別裡。
  • 因為抽象方法宣告沒有提供實際的實作,因此並有沒方法主題,方法宣告僅以分號做結束。
  • 在抽象方法宣告『static』與『virtual』修飾詞會出錯。

參考資料

http://msdn.microsoft.com/zh-tw/library/sf985hc5.aspx http://msdn.microsoft.com/zh-tw/library/ms173150.aspx

comments powered by Disqus