//inteface i11
public interface i11
{
void m11();
}
//interface i22
public interface i22
{
void m11();
}
//class ab implements interfaces i11 and i22
public class ab : i11, i22
{
public void m11()
{
Console.WriteLine("class");
}
}
现在在Main()方法中我们创建了一个类ab的对象 将调用哪个接口方法请解释所有。
答案 0 :(得分:9)
只有一种方法实现,所以无论引用的类型如何,都会被调用。即:
i11 o = new ab();
o.m11();
和
i22 o = new ab();
o.m11();
实际上是一样的。
ab.m11
满足两个接口中方法的签名。此外,您没有使用explicit interface implementation,因此这不是一个因素。
答案 1 :(得分:4)
您将接口的实现与具体类的扩展混淆。我相信这会让你想到这种关系倒退。根据定义,接口没有具体的实现。它只定义了实现类必须使用的契约。也许一个例子可以帮助澄清。
假设我们有一个名为IBank
的接口。该接口具有以下定义:
IBank
{
void AddMoney(int amount);
void RemoveMoney(int amount);
int GetBalance();
}
然后我们对此接口的具体实现如下:
EuroBank : IBank
{
void AddMoney(int amount){ balance+= amount; }
void RemoveMoney(int amount){ balance-= amount; }
int GetBalance(){ return balance; }
private int balance;
}
我无法创建IBank
的新实例。以下代码无法编译。
IBank bank = new IBank;
相反,我必须创建一个新的具体银行实例,我可以将其视为IBank
。然后我可以在这个类上调用方法。
IBank bank = new EuroBank;
bank.AddMoney(7);
所以当我调用AddMoney
时,我使用了接口定义的方法,但实际上我在AddMoney
类上调用了EuroBank
的具体实现。
因此,在您的示例中,您在m11
类上调用ab
方法。但是,ab
同时实现i11
和i22
。因此,它可以被视为i11
和i22
对象。以下两行代码都可以使用。
i11 first = new ab();
i22 second = new ab();
我可以在任一对象上调用m11
方法,但它总是使用对象ab
上找到的方法的具体实现。
答案 2 :(得分:4)
接口只是说“任何实现此接口的东西都可以确保拥有这些方法”。
如果你在这种情况下考虑它,你会发现它没有调用接口的方法;相反,它只是实现了所需的方法调用。
答案 3 :(得分:0)
该方法不是界面方法
将调用的方法是类m11
的{{1}}方法。