Java 中存在的接口的 C# 是“显式实现”吗?
2022-09-02 22:00:39
在 C# 中,如果有两个具有相同方法的基本接口(例如 F()),则可以使用显式实现来执行不同的 impl。对于 F()。这暗示了您以不同的方式对待对象,对应于当前的观点:作为IMyInterface1或IMyInterface2。这在Java中可能吗?
在 C# 中,如果有两个具有相同方法的基本接口(例如 F()),则可以使用显式实现来执行不同的 impl。对于 F()。这暗示了您以不同的方式对待对象,对应于当前的观点:作为IMyInterface1或IMyInterface2。这在Java中可能吗?
不,没有什么比Java中的C#显式接口实现更好的了。
从好的方面来说,Java具有协变返回类型,因此,如果您想提供比接口指定的更强的类型化实现,那没关系。例如,这很好:
interface Foo
{
Object getBar();
}
public class Test implements Foo
{
@Override
public String getBar()
{
return "hi";
}
}
C# 不允许这样做(在 C# 9 之前,它现在支持协变返回类型)-解决方法之一通常是显式实现接口,然后具有更具体的公共方法(通常由接口实现调用)。
在Java中使用匿名接口实现的机制可以达到类似的效果。
请参阅示例:
interface Foo {
void f();
}
interface Bar {
void f();
}
public class Test {
private String foo = "foo", bar = "bar";
Foo getFoo() {
return new Foo() {
@Override
public void f() {
System.out.println(foo);
}
};
}
Bar getBar() {
return new Bar() {
@Override
public void f() {
System.out.println(bar);
}
};
}
public static void main(String... args) {
Test test = new Test();
test.getFoo().f();
test.getBar().f();
}
}