【发布时间】:2010-03-02 09:15:13
【问题描述】:
我刚刚开始弄清楚 .Net 中隐式和显式接口实现之间的区别。由于我来自 Java 背景,这个想法仍然有点令人困惑。我希望知道哪个 Java 会更明显地看出区别是什么。我假设 Java 是显式的???
【问题讨论】:
我刚刚开始弄清楚 .Net 中隐式和显式接口实现之间的区别。由于我来自 Java 背景,这个想法仍然有点令人困惑。我希望知道哪个 Java 会更明显地看出区别是什么。我假设 Java 是显式的???
【问题讨论】:
不,Java 是隐式的。显式是指您要实现多个接口,这些接口中具有相同的方法签名,并且您明确声明该实现适用于哪个接口。
来自 MSDN 的示例:
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
这里我们有两个Paint() 方法,每个接口一个。在 Java 中,您只能有 一个 Paint() 实现。在 C# 中,您可以选择为每个接口实现版本,因此您可以根据类的调用方式获得不同的行为。
所以如果我打电话:
SampleClass c = new SampleClass();
((IControl)c).Paint();
((ISurface)c).Paint();
我会打印出“IControl.Paint”,然后打印出“ISurface.Paint”。
【讨论】:
在 Java 中没有显式和隐式的区别。如果您有两个接口都声明了一个具有相同签名的方法,并且一个类实现了这两个接口,那么具有正确签名的类中的一个方法实现了两个接口中的方法。
【讨论】: