2014-07-02 52 views
0

此代碼編譯沒有錯誤多態性,摘要和接口

class program 
{ 
    interface IA 
    { 
     void getName(string s); 
    } 

    interface IB 
    { 
     void getName(string s); 
    } 

    interface IC 
    { 
     void getName(string s); 
    } 

    public abstract class AC 
    { 
     public abstract void getName(string s); 
    } 

    public class CA : AC , IA, IB, IC 
    { 
    public override void getName(string s) 
     { 
      Console.WriteLine(s); 
     } 
    } 

    static void Main() 
    { 
     CA ca = new CA(); 

     Console.ReadLine(); 
    } 

} 

getName方法執行?如果我們有一個具有相同方法名稱的多個接口,那麼僅僅實現一個滿足所有接口的方法就足夠了嗎?如果他們做了不同的事情呢?請注意,我沒有指定有哪些getName(不同於此處的解決方案explicit naming)。

謝謝大家。

+2

該實現將用於滿足所有三個接口中的功能。 –

+0

@TrippKinetics謝謝。如果我刪除'override',那麼編譯器抱怨抽象方法中的'getName'沒有被執行。所以它似乎是單向的。 – Zuzlx

+1

@Zuzlx在接口中聲明的成員和在抽象類中聲明的成員是不同的。爲了滿足一個接口,你必須實現一個方法,以滿足抽象類,你必須重寫一個方法。因爲你必須明確說*我的方法覆蓋另一個*你必須使用'override'修飾符。 – MarcinJuraszek

回答

1

的實施將用於滿足在所有三個接口的功能。

2

在你的代碼類CA的方法GetName實現所有3個接口。如果他們有不同的含義,你將不得不使用顯式接口實現:

public class CA : AC, IA, IB, IC 
{ 
    public override void getName(string s) 
    { 
     Console.WriteLine(s); 
    } 

    void IC.getName(string s) 
    { 
     // Your code 
    } 

    void IB.getName(string s) 
    { 
     // Your code 
    } 

    void IA.getName(string s) 
    { 
     // Your code 
    } 
} 
1

我猜你的Class CA實現了CA中覆蓋的所有3個接口和抽象方法。因爲它滿足了你的類CA所需的所有實現,所以它不會拋出任何錯誤。如果你需要調用接口,調用它們明確。