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.
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.
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这种数据结构的特性也就失去意义了。
仅供参考~~~
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 sumberHashMap
untuk mengetahui bahawaLinkedHashMap
melaksanakanMap
. 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.
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.
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.