Pourquoi ne devriez-vous pas étendre JFrame et d’autres composants?

Je l’ai vu arriver plusieurs fois ici, mais dans les messages que j’ai vus, personne ne l’a expliqué. Pourquoi ne devrais-je pas étendre JFrame (ou un composant)? Existe-t-il des conditions dans lesquelles je devrais étendre un composant, ou s’agit-il d’une règle ferme que vous n’utilisez pas?

De manière générale, l’extension du composant tend à se faire ssortingctement pour l’utiliser. Cela limite considérablement vos options de manière inutile en termes de conception, de sorte que vos classes ne peuvent pas étendre différentes classes, vous ne pouvez pas masquer les méthodes de JFrame, ce qui rend sa maintenance plus difficile et facilite le déclenchement de bugs inattendus lors de l’utilisation de la classe. .

Généralement, l’intention est ssortingctement d’utiliser la classe pour dessiner un cadre, et la composition est préférée à l’inheritance.

Cela étant dit, les sous-classes devraient convenir lorsque vous souhaitez que votre sous-classe ajoute des fonctionnalités spécifiques au projet dans Frame (telles que des méthodes pratiques), où la sous-classe serait utilisée à la place du Frame lui-même, mais utilisée comme un cadre en général. , pas comme une vue d’un cadre spécifique dans l’application.

Préférez la composition à l’inheritance. Toutes les raisons habituelles. La composition force moins de dépendances entre le code.

Les composants Swing et Event AWT sont extrêmement compliqués. Vous ne voulez pas entrer dans ce gâchis. Vous pouvez facilement remplacer des méthodes accidentellement. Dans les cas où vous avez besoin de remplacer des méthodes, il est difficile de voir où cela se produit si cela fait partie du code normal.

Si votre application est VRAIMENT juste une JFrame, continuez et étendez-la. Cependant, il est préférable d’utiliser la composition d’object plutôt que l’inheritance si vous utilisez simplement un JFrame.

Si votre object étend un autre object, vous n’auriez pas le choix, par exemple.

Je ne vois pas le problème aussi longtemps que vous étendez la classe et que vous pouvez préserver les aspects “est-un” de l’inheritance.

Lorsque vous étendez un JPanel mais que votre nouvel object n’est pas une véritable spécialisation de JPanel, c’est là que vous rencontrez des problèmes. Mais si vous créez un nouveau SpeciallyFormattedJLabel qui étend JLabel , je ne vois aucun problème avec cela.

Je sais que c’est un ancien message, mais je viens de le trouver et je dois vous dire que l’extension de mes possibilités d’appeler certaines actions de l’object est limitée. Je réécris en fait certaines parties du code maintenant pour me débarrasser des dommages causés par l’extension. Sauf si j’écris un programme à un fichier, je ne vais pas utiliser à nouveau étendu.