La mia attuale comprensione dell'implementazione dell'ereditarietà è che si dovrebbe estendere una classe solo se è presente una relazione IS-A . Se la classe genitore può inoltre avere tipi figlio più specifici con funzionalità diverse ma condividerà elementi comuni astratti nel genitore.
Sto mettendo in dubbio questa comprensione a causa di ciò che il mio professore Java ci sta raccomandando di fare. Ha raccomandato che per JSwingun'applicazione stiamo costruendo in classe
Si dovrebbe estendere tutte le JSwingclassi ( JFrame, JButton, JTextBox, ecc) in classi personalizzate separati e specificare la personalizzazione correlata GUI in loro (come la dimensione dei componenti, dell'etichetta del componente, ecc)
Fin qui tutto bene, ma continua a consigliare che ogni JButton dovrebbe avere la sua classe estesa personalizzata anche se l'unico fattore distintivo è la loro etichetta.
Ad esempio, se la GUI ha due pulsanti OK e Annulla . Si consiglia di estenderli come di seguito:
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);
}
}
Come puoi vedere, l'unica differenza è nella setTextfunzione.
Quindi è questa pratica standard?
A proposito, il corso in cui questo è stato discusso si chiama Best Programming Practices in Java
[Risposta del Prof]
Quindi ho discusso il problema con il professore e ho sollevato tutti i punti citati nelle risposte.
La sua giustificazione è che la sottoclasse fornisce codice riutilizzabile seguendo gli standard di progettazione della GUI. Ad esempio, se lo sviluppatore ha utilizzato pulsanti personalizzati Okaye Cancelin una finestra, sarà più facile posizionare gli stessi pulsanti anche in altre finestre.
Presumo il motivo suppongo, ma sta ancora sfruttando l' eredità e rendendo fragile il codice.
In seguito, ogni sviluppatore potrebbe accidentalmente chiamare il setTextsu un Okaytasto e di modificarlo. La sottoclasse diventa solo fastidio in quel caso.
JButtone chiamare metodi pubblici nel suo costruttore, quando puoi semplicemente creareJButtone chiamare quegli stessi metodi pubblici al di fuori della classe?