java - 为什么在 'A' 扩展 'B' 时实现接口(interface) 'B' 和 'A'

标签 java class interface

假设我有以下代码...

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/

相关文章:

java - 从键盘输入时按退格键可删除多个字符

java - jar执行后指定Java命令行选项

java - Java 应用程序的规则引擎

java - Android:更改背景颜色显示对话框

Java初学者对构造函数的使用感到困惑

function - Swift 类中的静态与类函数/变量?

java - 如何提供不同插件采用不同参数的插件模型

java - 无法将 ArrayList<Impl> 传递给采用 ArrayList<Interface> 的方法

python - 如何在 python 中保存 "self"变量?

delphi - 释放从 Rectangle 继承的接口(interface)对象