Ma compréhension actuelle de l'implémentation d'héritage est qu'il ne faut étendre une classe que si une relation IS-A est présente. Si la classe parent peut en outre avoir des types enfants plus spécifiques avec des fonctionnalités différentes, mais partagera des éléments communs résumés dans le parent.
Je remets en question cette compréhension à cause de ce que mon professeur de Java nous recommande de faire. Il a recommandé que pour une JSwing
application que nous construisons en classe
Il faut étendre toutes les JSwing
classes ( JFrame
, JButton
, JTextBox
, etc.) dans des classes personnalisées séparées et spécifiez GUI personnalisation liée à eux (comme la taille des composants, l' étiquette des composants, etc.)
Jusqu'ici, tout va bien, mais il ajoute que chaque JButton devrait avoir sa propre classe étendue personnalisée, même si le seul facteur distinctif est son étiquette.
Par exemple, si l'interface graphique a deux boutons Ok et Annuler . Il recommande de les prolonger comme suit:
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);
}
}
Comme vous pouvez le constater, la seule différence réside dans la setText
fonction.
Alors, est-ce la pratique habituelle?
Btw, le cours où cela a été discuté s'appelle Meilleures pratiques de programmation en Java
[Réponse du Prof]
J'ai donc discuté du problème avec le professeur et soulevé tous les points mentionnés dans les réponses.
Sa justification est que le sous-classement fournit un code réutilisable tout en respectant les normes de conception d'interface graphique. Par exemple , si le développeur a personnalisé utilisé Okay
et des Cancel
boutons dans une fenêtre, il sera plus facile de placer les mêmes boutons dans d' autres Windows ainsi.
Je comprends la raison, je suppose, mais il ne s'agit tout simplement que d'exploiter l' héritage et de fragiliser le code.
Par la suite, tout développeur pourrait appeler le par mégarde setText
sur un Okay
bouton et le modifier. La sous-classe devient simplement gênante dans ce cas.
JButton
et appeler des méthodes publiques dans son constructeur, alors que vous pouvez simplement créerJButton
et appeler ces mêmes méthodes publiques en dehors de la classe?