当'B'延伸'A'时,为什么要实现接口'A'和'B'

Sko*_*gen 4 java interface class

假设我有以下代码......

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(){};
} 
Run Code Online (Sandbox Code Playgroud)

无论类ImplementTwo是实现B和A,还是只实现B,它仍然需要在接口A中实现方法a(),因为接口B扩展了接口A.是否有任何理由明确地做

...implements B, A
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

...implements B  
Run Code Online (Sandbox Code Playgroud)

man*_*uti 5

在行为方面,这两种方法没有区别.就字节码信息而言,在涉及实现接口的信息方面存在细微差别.例如:

Class<?>[] interfaces = ImplementTwo.class.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
    System.out.println(interfaces[i]);
}
Run Code Online (Sandbox Code Playgroud)

implements B, A在使用时返回两个类实例,而在使用implements B它时将返回一个实例.

仍然,true使用两种方法返回以下内容:

A.class.isAssignableFrom(ImplementTwo.class)
Run Code Online (Sandbox Code Playgroud)

  • 有趣的捕获和迄今为止唯一没有无聊的答案,+ 1 (3认同)