Il existe de nombreuses méthodes d'écriture de ce type dans le code source Collection du JDK. En fait, il faut admettre que cette façon d’écrire n’a aucun effet secondaire. Mais il y a un avantage à écrire de cette façon. Ouvrez le code source de LinkedHashMap séparément, et vous saurez de quelle classe il hérite et quelle interface il implémente. En d’autres termes, vous n’avez pas besoin de cliquer sur le code source de HashMap pour savoir que LinkedHashMap implémente Map. Autrement dit, vous n'avez pas à vous soucier des relations d'héritage, surtout lorsque les relations d'héritage entre les classes sont compliquées.
Ce est basé sur des considérations humaines Il existe également quelques exemples, comme l'interface hérite de l'interface, mais la sous-interface sera explicitement déclarée dans le interface parent Toutes les méthodes, et ajoutez explicitement l'annotation @Override pour indiquer spécifiquement que cette méthode est héritée de l'interface parent et n'a rien à voir avec l'interface que j'ai définie.
En fait, il s'agit peut-être simplement d'une pratique des développeurs Java. Habituellement, nos exigences indiqueront quelles interfaces une certaine classe doit implémenter, mais en fait, si nous prenons la peine de trouver les dépendances mutuelles de ces interfaces et que nous éliminons ensuite les projets en double, le processus sera fastidieux, et ces doublons également traité automatiquement au moment de la compilation. Ainsi, ces personnes écrivent directement les classes qui doivent être implémentées, éliminant ainsi les problèmes de déduplication manuelle.
Lorsque vous regardez le code source, vous ne voyez que la définition de la classe, mais il n'y a pas d'exploration plus approfondie de cette raison. Nous savons qu'en Java, il existe un héritage unique. Vous ne pouvez hériter que d'une seule classe, mais vous pouvez implémenter plusieurs interfaces différentes.
源码LinkedHashMap:
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
源码HashMap:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
之所以这样设计,我想有一下几个原因:
1.LinkedHashMap要保留Map这种数据结构的特性,因此它要实现Map所有的方法。
2.LinkedHashMap是对HashMap中无序问题提出的改进,因此,它继承了HashMap。
试想,如果你只继承了HashMap,而没有实现Map接口,那么是不是Map中的一些方法,LinkedHashMap可以不需要去实现的啊?那么LinkedHashMap保留Map这种数据结构的特性也就失去意义了。
仅供参考~~~
Il existe de nombreuses méthodes d'écriture de ce type dans le code source Collection du JDK.
En fait, il faut admettre que cette façon d’écrire n’a aucun effet secondaire.
Mais il y a un avantage à écrire de cette façon. Ouvrez le code source de
LinkedHashMap
séparément, et vous saurez de quelle classe il hérite et quelle interface il implémente. En d’autres termes, vous n’avez pas besoin de cliquer sur le code source deHashMap
pour savoir queLinkedHashMap
implémenteMap
. Autrement dit, vous n'avez pas à vous soucier des relations d'héritage, surtout lorsque les relations d'héritage entre les classes sont compliquées.Ce est basé sur des considérations humaines Il existe également quelques exemples, comme l'interface
hérite de l'interface, mais la sous-interface sera explicitement déclarée dans le interface parent Toutes les méthodes, et ajoutez explicitement l'annotation @Override pour indiquer spécifiquement que cette méthode est héritée de l'interface parent et n'a rien à voir avec l'interface que j'ai définie.
En fait, il s'agit peut-être simplement d'une pratique des développeurs Java.
Habituellement, nos exigences indiqueront quelles interfaces une certaine classe doit implémenter, mais en fait, si nous prenons la peine de trouver les dépendances mutuelles de ces interfaces et que nous éliminons ensuite les projets en double, le processus sera fastidieux, et ces doublons également traité automatiquement au moment de la compilation. Ainsi, ces personnes écrivent directement les classes qui doivent être implémentées, éliminant ainsi les problèmes de déduplication manuelle.
Lorsque vous regardez le code source, vous ne voyez que la définition de la classe, mais il n'y a pas d'exploration plus approfondie de cette raison. Nous savons qu'en Java, il existe un héritage unique. Vous ne pouvez hériter que d'une seule classe, mais vous pouvez implémenter plusieurs interfaces différentes.