HashMap已经实现了Map接口,LinkedHashMap既然继承了HashMap,为什么还要implements一遍,是为了保留自己跟父类HashMap中Map方法不一样的可能性吗?如果是,那为什么不直接重写,还要再继承呢?
附:LinkedHashMap源代码
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {
/*
省略内部代码
*/
}
怪我咯2017-04-18 09:32:41
JDKのCollectionソースコードにはこのような書き方がたくさんあります。
実際、この書き方には副作用がないことを認めなければなりません。
しかし、この方法で記述することには利点があります。LinkedHashMap
のソース コードを個別に開くと、どのクラスが継承され、どのインターフェイスが実装されているかがわかります。言い換えれば、HashMap
が LinkedHashMap
を実装していることを知るために Map
のソース コードをクリックする必要はありません。つまり、特にクラス間の継承関係が非常に複雑な場合、継承関係について心配する必要はありません。
この は人道的な考慮事項に基づいています。たとえば、
インターフェースはインターフェースを継承しますが、サブインターフェースは で明示的に宣言されます。すべてのメソッドを作成し、このメソッドが親インターフェイスから継承され、自分で定義したインターフェイスとは何の関係もないことを明示的に示すために、アノテーション @Override を追加します。
ringa_lee2017-04-18 09:32:41
実際、これは単なる Java 開発者の習慣かもしれません。
通常、要件には特定のクラスがどのインターフェースを実装する必要があるかが記載されていますが、実際には、これらのインターフェースの相互依存関係をわざわざ見つけて重複プロジェクトを削除すると、プロセスが煩雑になり、これらの重複がまた、コンパイル時に自動的に処理されます。したがって、これらの人々は実装が必要なクラスを直接作成し、手動による重複排除の手間を省きます。
PHP中文网2017-04-18 09:32:41
ソース コードを見ると、クラスの定義のみが表示されますが、この理由については詳しく調べられていません。 Java では単一の継承があることがわかっていますが、継承できるクラスは 1 つだけですが、複数の異なるインターフェイスを実装できます。
リーリー