Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Prochaine sessions inter-entreprises : 13-16 février 2018
Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

Java Quiz #1

Petit quiz Java : Indiquez deux façons d'interdire le sous-classement d'une classe donnée ?

La réponse est dans le lien ci-dessous, mais ne trichez pas !

Méthode 1

Il suffit de déclarer la classe "final".
Cette méthode est la plus connue, car elle repose sur un mot-clé spécifique du langage.

  1. public final class NonDerivable1
  2. {
  3. ...
  4. }

Méthode 2

La seconde méthode repose sur la cinématique d'instanciation des classes.
Petit rappel : lors qu'une classe doit être instanciée, son constructeur est invoqué. Mais, avant que le code de ce constructeur ne soit exécuté, le constructeur de la classe parente est invoqué à son tour, et ainsi de suite en remontant la hiérarchie des classes jusqu'à la classe Object.

Voyons maintenant comment cela s'applique à notre Quiz.
Si une classe ne dispose d'aucun constructeur appelable (=visible), il sera impossible d'instancier une hypothétique classe fille, car la cinématique d'instanciation serait interrompue.

Attention toutefois : il ne suffit pas de ne déclarer aucun constructeur dans la classe, car le compilateur en fournirait un automatiquement (le "constructeur par défaut", publique et sans arguments). La technique consiste donc à déclarer un constructeur privé. Ainsi :

  • le compilateur n'introduira aucun constructeur publique susceptible d'être appelé par la classe fille lors de son instanciation
  • le constructeur étant privé, aucune classe (fille ou non) ne pourra l'appeler : la cinématique d'instanciation sera donc bien interrompue.
  1. public class NonDerivable2
  2. {
  3. // Constructeur privé
  4. private NonDerivable2()
  5. {
  6. ...
  7. }
  8. }

Commentaires

1. Le mercredi 20 février 2008, 15:59 par Mialy

Je dirais :
1) Mettre la classe 'final'
2) Mettre toutes les méthodes de la classe 'final' mais je ne suis pas persuadée que c'est une bonne réponse

2. Le mercredi 20 février 2008, 19:23 par Slider

Si maintenant on a le droit à des mini-jeux, y'a pas à dire, ton blog va devenir ma référence!
Encore, encore, encore !

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.