假设我有以下代码...
interface A{
void a();
}
interface B extends A{
void b();
}
class ImplementOne implements B{
public void a(){};
public void b(){};
}
class ImplementTwo implements B, A{
public void a(){};
public void b(){};
}
无论类 ImplementTwo 是同时实现 B 和 A,还是只实现 B,它仍然需要在接口(interface) A 中实现方法 a(),因为接口(interface) B 扩展了接口(interface) A。是否有任何理由明确地这样做
...implements B, A
不仅仅是
...implements B
?
最佳答案
这两种方法在行为方面没有区别。就字节码信息而言,当涉及到已实现接口(interface)的信息时,差异很小。例如:
Class<?>[] interfaces = ImplementTwo.class.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
System.out.println(interfaces[i]);
}
当使用 implements B, A
时会返回两个类实例,而当使用 implements B
时会返回一个实例。
仍然,以下使用这两种方法返回 true
:
A.class.isAssignableFrom(ImplementTwo.class)
关于java - 为什么在 'A' 扩展 'B' 时实现接口(interface) 'B' 和 'A',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25745767/