Java 没有 C# 的等价物public void A.show()
,因为它根本不会让接口以那种方式发生冲突。如果你实现了两个接口,声明了一个具有相同名称和相同参数类型的方法,它们要么也具有相同的返回类型,要么 Java 甚至不会编译代码。并且一旦返回类型也相同,实现一个或另一个的类实际上同时实现了两者,因为签名满足两个接口的要求。
当然,如果你想验证...
public class Example {
interface A { public void show(); }
interface B { public void show(); }
class C implements A, B {
public void show() { System.out.println("show()ing"); }
}
public static void main(String[] args) {
C c = new C();
A a = c;
a.show(); // does something, trust me :P
B b = c;
b.show(); // does something too
}
}
C
'svoid show()
满足两个接口的方法声明,所以一切正常,控制台中出现两行(一行用于通过 A 引用的调用,一行用于 B 调用)。
现在,说你有
interface A { public void show(); }
interface B { public int show(); } <-- different return type!
class C implements A, B { public void show(); }
您尝试实施哪种方法有点明显。但是,这是行不通的——而且不能,因为 Java 不会让两个接口的方法存在于同一个类中。
现在,最后一个例子。
interface A { public void show(); }
interface B { public int show(int); } <-- different return type!
class C implements A, B {
public void show() { System.out.println("Showing..."); }
public int show(int i) { System.out.println(i); }
}
这很好。由于两个接口声明只共享一个名称而不共享 arg 类型,Java 允许它们在C
. 但它也要求您为每个接口实现一种方法。