是否应该在子类中显式实现从基类继承的接口?

Mne*_*nth 13 java interface contract

我的问题是,如果通过扩展已经实现它的类隐式实现的接口应该由类显式实现,如果类想要通告该事实,则它满足该接口的约定.

例如,如果要编写一个类,那就完成了接口的约定java.util.List.您实现了这个,扩展了java.util.AbstractList已经实现接口的类List.你明确声明,你实现了List吗?

public class MyList extends AbstractList implements List
Run Code Online (Sandbox Code Playgroud)

或者你是否通过隐式方式保存输入?

public class MyList extends AbstractList
Run Code Online (Sandbox Code Playgroud)

哪种方式被认为是更好的风格?你有什么理由喜欢这种或那种方式?在哪种情况下你更喜欢方式1或方式2?

kro*_*old 12

避免冗余.使用方法2.

使用@Override进行覆盖.


Ste*_* B. 7

这不是一个"风格"的问题.如果要扩展已实现List的AbstractList,则不需要显式实现List.

这不仅仅是一个保存打字的问题.由于额外的"工具列表"是多余的,有人可能会花一些时间试图找出它存在的原因.你本质上是在写一个已经成为语言一部分的保证.

  • 如果其他人将AbstractList更改为不再实现List会发生什么?然后MyList坏了?我不认为这是一个强有力的论据,只是扮演魔鬼的拥护者. (5认同)

Ale*_*ler 4

很久以前在我的博客上问过同样的问题。如果您有兴趣了解其他人的想法,那里也有一个很长的讨论。有趣的是,这两种策略都是在 JDK 中采用的。

我最终认为对此制定硬性规则是没有意义的 - 最好对我想要传达的内容使用最佳判断。