接口保证将实现一组给定的方法。接口本身并不关心代码将如何实现。与扩展类相反,当您扩展一个类时,您使用的是一些预定义的代码。
如果您使用相同的方法扩展两个类,例如methodA
,并调用此方法,那么编译器将不知道它需要运行哪一个。另一方面,当您使用相同的方法实现两个接口时,由于实现是在您自己的代码中编写的,编译器将知道它需要去哪里找到实现。
所以基本上,当你实现某些东西时,你保证你会提供一些服务。
编辑:我将尝试以您的示例为例,并以某种面向对象的方式对其进行转换,这有望使事情变得更清楚。
Jack 和 Ben 会保证他们会借给你钱,而另一方面,你保证会偿还,所以,从 OO 的角度来看,你可以这样看:
public interface IPay
{
public void Pay(Individual i);
}
public class MySelf : IPay
{
public void Pay(Individual i)
{
...
}
}
public interface ILend
{
public void Lend(Individual i);
}
public class Jack : ILend //Same applies for Ben
{
public void Lend(Individual i)
{
...
}
}
这就是我将如何处理您指定的问题。
至于另一个垃圾示例,您可以这样做:
public interface ITakeTrash
{
public void TakeTrash(Trash t);
}
public Son : ITakeTrash
{
public void TakeTrash(Trash t);
}
public class Mum //Same applies for dad
{
Son mySon = ...
mySon.TakeTrash(t);
}
你爸妈都不知道怎么处理垃圾,但是,他们知道你知道怎么处理,这才是他们关心的(就像上面一样,你只关心本和杰克能给你钱和其他方只关心你能不能还钱,没有人真正关心你是怎么做的。
我确实了解您想要去哪里,基本上是说如果我使用具有相同名称的方法实现两个不同的接口来做不同的事情。如果您最终陷入这种情况,我认为那是由于设计不当造成的。我不建议建立一个做无数不同事情的单一类,这是原因之一。
另一方面,你可能会问,如果我有 2 个接口用同名的方法做类似的事情怎么办?然后,我认为答案是,由于接口做类似的事情并且你有同名的方法,很可能你正在做同样的事情,因此,你不必混淆自己。
我希望这个编辑有助于阐明这个问题。