物件導向系列菜單4-『物件導向特性-繼承(Inheritance)3-Sealed』

摘要:物件導向系列菜單4-『物件導向特性-繼承(Inheritance)3-Sealed』

 
官爺:陳夢吉!
陳夢吉: 我的名字是給你叫的嗎?
官爺:老子有大筆的財產~但老子我就是不想給任何人繼承~! 要如何做呢?
陳夢吉 : 你有聽過『sealed』嗎?,憑你的智慧,我很難跟你解釋!
 

 
正文開始
本文主要討論主題為
1.『類別不給繼承要這麼做呢?
2.『已覆寫完的方法不給衍生類別再覆寫要這麼做呢?

 

『類別不給繼承要這麼做呢?

Step1. 使用『Sealed』

 
下列為簡單的Sealed範例。
 
Car類別程式說明:
父類別Class Car ,有兩個屬性分別為Speed與Color,
並自行訂定建構子Car() ,以及DriveCar()方法,在這
範例中我們將Car類別,新增『Sealed』修飾詞主要
目的為不然其它類別繼承。

/// 
    /// 父類別
    /// 
    public sealed  class Car   //增加Sealed
    {

        //車子的速度
        public string Speed;
        //車子的顏色
        public string Color;  
        /// 
        /// 定義建構子,預設Speed為50,Color為Blue
        /// 
        public  Car()
        {
            Speed = "50";
            Color = "Blue";
        }

        //定義車子移動的方法
        public string DriveCar()
        {
            return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" ;
        }

    }
BMWCar類別程式說明
子類別BMWCar Class 繼承父類別Car,並有自行定義建構子BMWCar() ,
以及BMWPower屬性。由於父類別Car有加Sealed因此無法被繼承。依下列
程式碼,會找不到父類別的Speed與Color,而出現錯誤訊息。

  /// 
    /// 子類別想繼承Car Class,但因為Car有加Sealed因此無法被繼承。
    /// 
    public class BMWCar :Car   
    {
        //BMWCar類別建構子
        public BMWCar()
        {
            Speed = "BMW500";
            Color = "BWM_Red";
        }

        //BMW的屬性引擎
        public string BMWPower;

    }

 

『已覆寫完的方法不給衍生類別再覆寫要這麼做呢?』
 
有時在使用時,我們不想讓已經覆寫過的方法要著麼做呢?
下列程式碼,有三個類別Car、BMWCar、IBMWCar。
繼承關於為
Car → BMWCar → IBMWCar
 

   
   //父類別
    public class Car
    {

        //定義車子移動的方法。
        //在該方法加上Virtual,讓該方法可以被衍生類別覆寫。
        public virtual   string DriveCar( string a)
        {
            return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" ;
        }
    }
要讓BWMCar已覆寫過的DriveCar()不被IBMWCa覆寫,要在
DriveCar前加上『sealed』修飾詞。

 //BMWCar繼承Car Class
public class BMWCar: Car
    {
        //定義車子移動的方法
        //使用存取修飾詞Overried,來進行覆寫
        //參數a 為 string
        public sealed   override string DriveCar(string a)
        {
            return "正在開『" + Color + "』的車" + "時速『" + Speed + "』在移動" + "『Override』" + "String--" + a;
        }
}

//測試可不覆寫DriveCar();
//IBMWCar 繼承 BMWCar
public class IBMWCar : BMWCar
    {
        public override string DriveCar( string a)
        {
            return "ICar" ;
        }
    }
這時就會發生下列錯誤,告知該方法無法在被覆寫。

待續…

 

 



小弟才書學淺~請各位客官指教指教~~~

小弟日 : 你要知道自已不是帥哥,你才有可能變成帥哥 。