Java LinkedHashMap为什么要实现Map接口?
ringa_lee
ringa_lee 2017-04-18 09:30:41
0
3
999

HashMap已经实现了Map接口,LinkedHashMap既然继承了HashMap,为什么还要implements一遍,是为了保留自己跟父类HashMap中Map方法不一样的可能性吗?如果是,那为什么不直接重写,还要再继承呢?

附:LinkedHashMap源代码

public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {
/*
省略内部代码
*/
}
ringa_lee
ringa_lee

ringa_lee

répondre à tous(3)
刘奇

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这种数据结构的特性也就失去意义了。

仅供参考~~~
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal