繁体   English   中英

Java继承层次结构 - 实现超类正在实现的接口

[英]Java inheritance hierarchy — implementing an interface a super-class is implementing

当我扩展一个类,比如说B类中的A类时,我正在实现A类实现的所有接口。

在下面的,

interface INTF { ... }

class A implements INTF { ... }

class B extends A { .... }

作为A类后代的B类正在实施INTF。

那么,宣布B级的收获是什么呢?

class B extends A implements INTF { .... }

// ===========================

编辑:

Java API正在这样做。 例如。:

public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> { ...

做什么的 ?

TIA

如果你的子类重申它实现了一个接口没有区别。但是当涉及到Reflection API时,它有很大的收获。我亲自面对它。

当你调用B.class.getInterfaces() ,它返回一个Class [],它只包含那些由类显式声明的接口,而不是它的超类,尽管实际上它实现的是由超类实现的接口。 要解决它,你需要递归调用超类并实现所有接口。在子类中显式地声明接口将在这种情况下帮助你

您不必再次重新声明该接口。 但是,如果使用Java反射--B.class.getInterfaces() ,则会有所不同。

  • 如果您不再次重新声明该接口。 B.class.getInterfaces() - 返回零接口

  • 如果重新声明接口B.class.getInterfaces() - 返回一个接口

所以决定再次重新声明界面或不依赖于你如何使用java反射。 在大多数情况下,我们不会再次重申。

您不必再次指定接口。 您可以再次指定所有已实现的方法,但您也不必这样做。

如果A更改它在将来实现的接口,则可能不需要了解它。

您是否指定B实现INTF没有区别,因为它必须实现它,因为A正在实现它。

我不确定为什么Java API会这样做。 我假设他们只是想让LinkedHashMap的用户更清楚它实现了Map (否则用户必须查看HashMap的声明才能找到它)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM