程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 基類與接口混合繼承的聲明問題(3)

基類與接口混合繼承的聲明問題(3)

編輯:關於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