[英]Implementing an interface which inherits from two interfaces with the same method
[英]Class Implementing Two Interfaces which Define the Same Method
//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的对象,接口方法将被调用,请解释所有。
只有一种方法实现,所以无论引用的类型如何,都会被调用。 IE:
i11 o = new ab();
o.m11();
和
i22 o = new ab();
o.m11();
实际上是一样的。
ab.m11
满足两个接口中方法的签名。 此外,您没有使用显式接口实现 ,因此这不是一个因素。
您将接口的实现与具体类的扩展混淆。 我相信这会让你想到这种关系倒退。 根据定义,接口没有具体的实现。 它只定义了实现类必须使用的契约。 也许一个例子可以帮助澄清。
假设我们有一个名为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
,我使用接口定义的方法,但实际上我在EuroBank
类上调用了AddMoney
的具体实现。
所以在你的例子中,你在ab
类上调用m11
方法。 但是, ab
实现了i11
和i22
。 因此,它可以被视为i11
和i22
对象。 以下两行代码都可以使用。
i11 first = new ab();
i22 second = new ab();
我可以在任一对象上调用m11
方法,但它总是使用对象ab
上找到的方法的具体实现。
接口只是说“任何实现此接口的东西都可以确保具有这些方法”。
如果您在该上下文中考虑它,您将看到它不会调用接口的方法; 相反,它只是实现了所需的方法调用。
该方法不是接口方法。
将被调用的方法是类ab
的m11
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.