[英]Java implementing interface Cloneable on a inheritance structure
[英]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.