首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

基類與介面混合繼承的宣告問題(三)

     編輯:關於C語言

Oh,程式碼無法編譯,編譯器發脾氣了:

'B1.IC.M()': containing type does implement interface 'IC'

換句話說,我們不能在 B1 裡重新實作 IC.M 方法,只能默默接受從基類繼承而來的那一個!再修改一下:

interface IC { void M(); }
class A : IC
{
    void IC.M() { Console.WriteLine("In class A"); }
}
class B1 : A { }
class B2 : A, IC
{
    void IC.M() { Console.WriteLine("In class B2"); }
}
class Program
{
    static void Main()
    {
        List<IC> cs = new List<IC>();
        cs.Add(new A());
        cs.Add(new B1());
        cs.Add(new B2());
        foreach (IC c in cs) c.M();
    }
}

這些編譯正常通過,結果是:

In class A
In class A
In class B2

3. 得出結論 & 新問題展現

好吧,有結果了。B1 和 B2 兩種繼承方式的效果確不同,具體體現在多態行為上(有關多態介紹,可參見《今天你多態了嗎?》)。B1 是可憐蟲,必須接受 A 對 IC.M 的實現,無法改變命運;然而 B2 不同,它有權選擇接受還是拒絕,當然拒絕條件是提供自己特色的實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved