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