Saya percaya bahwa kebanyakan orang lebih akrab dengan dua hal dari "warisan" dan "kombinasi" di Jawa. Artikel ini terutama akan membahas dua topik ini. Jika saya menulis sesuatu yang salah, atau itu kekanak -kanakan dan argumennya tidak jelas, semua orang dipersilakan untuk meninggalkan pesan untuk mengoreksi saya.
Misalkan ada 2 kelas: A dan B :
extends maka kita mengatakan bahwa A mewarisi B, A adalah subclass, dan B adalah kelas induk, dan kasus ini adalah warisan.Pikirkan kembali keadaan apa yang biasanya kita pertimbangkan dua hal ini? Saya memikirkannya secara singkat dan sering ada skenario berikut:
abstract class atau interface diekstraksi Setelah memikirkannya, tampaknya hanya ada dua situasi ini, tetapi dua situasi ini memiliki hubungan khusus. Misalnya, masalah kode publik sebenarnya dapat dicapai abstract class dan interface (metode default di Java 8).
Nah, setelah mengatakan begitu banyak omong kosong, saya hanya akan melempar sudut pandang saya. Selamat Datang di:
interface abstract class Contoh yang lebih umum: dalam proyek aktual, kami sering mendefinisikan POJO atau model , dan model -model ini sering memiliki beberapa atribut dengan kata benda dan jenis yang sama, seperti:
// db table primary keyprivate int id; Ini sangat umum, tetapi saya telah bertemu banyak kolega dalam pekerjaan saya yang sebenarnya. Sistem mendefinisikan kelas dengan nama BaseModel atau RootModel , menempatkan id atribut di atas di dalamnya, dan kemudian semua model di seluruh proyek mewarisi kelas Basemoddel ini. Saya ingin tahu apakah Anda pernah bertemu dengan kolega seperti itu? Apa manfaat dan kerugian penulisan seperti ini?
Mari kita bicara tentang manfaatnya terlebih dahulu. Jika Anda harus mengatakan manfaat apa yang dapat dibawanya, Anda tidak melihat manfaat substansial kecuali untuk mengetik keyboard beberapa kali dan kehilangan atribut ini di subkelas. Namun, itu telah menyebabkan hal -hal yang sangat merepotkan bagi pemeliharaan proyek selanjutnya.
Lalu mari kita bicara tentang potensi masalah tulisan ini:
Suatu hari, karena beberapa alasan, Anda ingin menemukan di mana menggunakan
idatribut di subkelas A (mewarisi basemodel) dalam proyek
Anda cerdas dan digunakan dengan baik find usages di IDE, dan kemudian Anda akan menemukan bahwa Anda telah menemukan banyak lokasi penggunaan, dan banyak dari mereka bukan yang Anda pedulikan sama sekali. Tetapi tidak mungkin, Anda juga telah mencari lokasi penggunaan ID properti dari kelas lain yang mewarisi basemodel. Jika proyek tidak besar, Anda mungkin memiliki lebih sedikit keahlian. Bagaimana jika proyeknya sedikit lebih besar? Ketika Anda memiliki lebih dari 50 kemahiran dalam pencarian, apa yang akan Anda lakukan selanjutnya?
Bagaimana cara menghindari situasi ini? Artinya, jangan gunakan BaseModel seperti ini untuk menggunakan warisan atribut. Tentu saja, demi periode yang ketat, saya masih perlu menjelaskan makna ini secara rinci. Saya tidak sepenuhnya menentang warisan atribut. Mari kita klarifikasi:
Yang saya objek adalah bahwa semua model dari seluruh proyek mewarisi basemodel dan kemudian meletakkan sifat umum di basemodel
Gagasan ini adalah untuk mencatat bahwa itu untuk seluruh proyek
Saya pribadi sering menemukan contoh buku teks negatif di atas, jadi saya akan membicarakannya secara terpisah. Saya tidak yakin apakah ini terjadi dalam proyek Anda. Bagaimanapun, saya telah ditipu oleh kolega saya berkali -kali.
Adapun kesalahan umum lainnya yang terkait dengan "kombinasi" dan "warisan", saya belum memikirkannya (setidaknya saya pikir tidak ada yang akan berhasil). Jika saya pikir itu jelas di masa depan, atau jika pembaca memiliki saran lain, saya harap Anda dapat meninggalkan pesan untuk berkomunikasi.