Rumah  >  Soal Jawab  >  teks badan

Java LinkedHashMap为什么要实现Map接口?

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

附:LinkedHashMap源代码

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

membalas semua(3)saya akan balas

  • 怪我咯

    怪我咯2017-04-18 09:32:41

    Terdapat banyak kaedah penulisan sedemikian dalam kod sumber Koleksi JDK.
    Sebenarnya kita kena akui cara penulisan ini tiada kesan sampingan.
    Tetapi terdapat kelebihan untuk menulis dengan cara ini Buka kod sumber LinkedHashMap secara berasingan, dan anda akan mengetahui kelas mana yang diwarisi dan antara muka yang ia laksanakan. Dengan kata lain, anda tidak perlu mengklik pada kod sumber HashMap untuk mengetahui bahawa LinkedHashMap melaksanakan Map. Iaitu, anda tidak perlu risau tentang hubungan warisan, terutamanya apabila hubungan warisan antara kelas adalah rumit.

    Ini berdasarkan pertimbangan berperikemanusiaan Terdapat juga beberapa contoh, antara muka
    mewarisi antara muka, tetapi sub-antara muka akan diisytiharkan secara eksplisit. antara muka induk. Semua kaedah, dan tambahkan anotasi @Override secara eksplisit untuk menunjukkan secara khusus bahawa kaedah ini diwarisi daripada antara muka induk dan tiada kaitan dengan antara muka yang saya tentukan sendiri.

    balas
    0
  • ringa_lee

    ringa_lee2017-04-18 09:32:41

    Malah, ini mungkin hanya amalan pembangun Java.
    Biasanya keperluan kami akan menyatakan antara muka mana yang perlu dilaksanakan oleh kelas tertentu, tetapi sebenarnya, jika kami mengambil masalah untuk mencari kebergantungan bersama antara antara muka ini dan kemudian menghapuskan projek pendua, prosesnya akan menjadi rumit, dan pendua ini akan juga Diproses secara automatik pada masa penyusunan. Oleh itu, orang-orang ini terus menulis kelas yang diperlukan untuk dilaksanakan, menjimatkan masalah penyahduplikasian manual.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 09:32:41

    Apabila anda melihat kod sumber, anda hanya melihat definisi kelas, tetapi tiada penerokaan yang lebih mendalam tentang sebab ini. Kami tahu bahawa dalam Java, terdapat warisan tunggal Anda hanya boleh mewarisi satu kelas, tetapi anda boleh melaksanakan berbilang antara muka yang berbeza.

     源码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这种数据结构的特性也就失去意义了。
    
    仅供参考~~~
    

    balas
    0
  • Batalbalas