【发布时间】:2015-12-10 15:24:02
【问题描述】:
实现一个接口并扩展一个实现相同接口的类会导致任何问题吗? (除了混淆)
例如:
interface IDo
public abstract class DoIt implements IDo
public class IllDo extends DoIt implements IDo
(请忽略它似乎是错误的)
【问题讨论】:
-
应该没有问题,同一个接口实现两次是多余的
实现一个接口并扩展一个实现相同接口的类会导致任何问题吗? (除了混淆)
例如:
interface IDo
public abstract class DoIt implements IDo
public class IllDo extends DoIt implements IDo
(请忽略它似乎是错误的)
【问题讨论】:
当你扩展一个类时,你继承了它的整个接口,包括它实现的任何接口或它派生的类。因此,任何扩展DoIt 的类自动 实现IDo,就其本质而言,它扩展了实现它的类。您可以将implements 子句放在声明中,但它对类没有任何进一步的影响。但是,可能有这样做的理由,正如this question 的答案中所述:它记录了您特别打算让该类实现接口,这意味着如果将超类修改为不再包含 implements 子句,子类要么中断(因为它缺少接口所需的东西)要么保持其原始合同。
【讨论】:
IllDo直接覆盖IDo中的每个成员)。
java.util.Collection 框架遵循相同的约定。 Why does ArrayList have “implements List”? ,但我知道这纯粹是基于意见。 (最终,无论哪种方式都不会产生任何影响)。
ArrayList 或此处 IllDo 类的层次结构,我们需要查看它的父类,即它是任何类型的(意思是实现一个界面)。因此,如果我们添加implements 子句,很容易知道它的类型并且很容易遍历/移动代码。 (仍然基于意见):P :)