Pemahaman saya saat ini tentang implementasi Warisan adalah bahwa seseorang hanya perlu memperluas kelas jika ada hubungan IS-A . Jika kelas induk lebih lanjut dapat memiliki tipe anak yang lebih spesifik dengan fungsionalitas yang berbeda tetapi akan berbagi elemen umum yang diabstraksi dalam induk.
Saya mempertanyakan pemahaman itu karena apa yang direkomendasikan oleh profesor Jawa saya untuk kita lakukan. Dia merekomendasikan untuk JSwing
aplikasi yang sedang kita buat di kelas
Satu harus memperpanjang semua JSwing
kelas ( JFrame
, JButton
, JTextBox
, dll) ke dalam kelas kustom terpisah dan menentukan kustomisasi terkait GUI di dalamnya (seperti ukuran komponen, komponen label, dll)
Sejauh ini bagus, tetapi ia lebih lanjut menyarankan bahwa setiap JButton harus memiliki kelas ekstensi kustom sendiri meskipun satu-satunya faktor pembeda adalah label mereka.
Untuk misalnya Jika GUI memiliki dua tombol, Oke dan Batalkan . Dia merekomendasikan mereka harus diperpanjang seperti di bawah ini:
class OkayButton extends JButton{
MainUI mui;
public OkayButton(MainUI mui) {
setSize(80,60);
setText("Okay");
this.mui = mui;
mui.add(this);
}
}
class CancelButton extends JButton{
MainUI mui;
public CancelButton(MainUI mui) {
setSize(80,60);
setText("Cancel");
this.mui = mui;
mui.add(this);
}
}
Seperti yang Anda lihat, satu-satunya perbedaan adalah setText
fungsi.
Jadi apakah ini praktik standar?
Btw, kursus di mana ini dibahas disebut Praktik Pemrograman Terbaik di Jawa
[Balas dari Prof]
Jadi saya membahas masalah dengan profesor dan mengangkat semua poin yang disebutkan dalam jawaban.
Pembenarannya adalah bahwa subclassing menyediakan kode yang dapat digunakan kembali sambil mengikuti standar desain GUI. Misalnya jika pengembang telah menggunakan tombol Okay
dan kustom Cancel
di satu Window, akan lebih mudah untuk menempatkan tombol yang sama di Windows lain juga.
Saya mendapatkan alasan saya kira, tapi tetap saja hanya mengeksploitasi warisan dan membuat kode rapuh.
Kemudian, setiap pengembang sengaja bisa memanggil setText
pada Okay
tombol dan mengubahnya. Subkelas hanya menjadi gangguan dalam kasus itu.
JButton
dan panggil metode publik dalam konstruktornya, ketika Anda bisa membuatJButton
dan memanggil metode publik yang sama di luar kelas?