L’héritage est l’un des mécanismes les plus importants de la programmation orientée objet en Java.
Il permet de construire des classes spécialisées à partir de classes plus générales, en réutilisant des attributs et des méthodes déjà définis.
Cette logique hiérarchique aide à modéliser des concepts du monde réel et à structurer un programme de manière cohérente, tout en limitant la duplication de code.
Les QCM proposés dans cette thématique abordent les règles essentielles de l’héritage : relation entre classes, accès aux membres, redéfinition de méthodes, rôle de super, classes abstraites et restrictions liées à final.
Ces notions sont très présentes dans les examens et concours, car elles évaluent la capacité à concevoir des modèles orientés objet propres et maintenables.
Maîtriser l’héritage, c’est apprendre à construire des architectures plus solides, plus évolutives et plus lisibles.
L’héritage est l’un des mécanismes les plus importants de la programmation orientée objet en Java.
Il permet de construire des classes spécialisées à partir de classes plus générales, en réutilisant des attributs et des méthodes déjà définis.
Cette logique hiérarchique aide à modéliser des concepts du monde réel et à structurer un programme de manière cohérente, tout en limitant la duplication de code.
Les QCM proposés dans cette thématique abordent les règles essentielles de l’héritage : relation entre classes, accès aux membres, redéfinition de méthodes, rôle de super, classes abstraites et restrictions liées à final.
Ces notions sont très présentes dans les examens et concours, car elles évaluent la capacité à concevoir des modèles orientés objet propres et maintenables.
Maîtriser l’héritage, c’est apprendre à construire des architectures plus solides, plus évolutives et plus lisibles.
QCM
1
Corrigé
Quel mot-clé Java est utilisé pour qu'une classe hérite d'une autre ?
A. implements
B. inherits
C. extends
D. protected
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Le mot-clé 'extends' permet d'étendre les fonctionnalités d'une classe parente vers une classe enfant.
QCM
2
Corrigé
Dans une hiérarchie d'héritage, comment appelle-t-on la classe dont on hérite ?
A. La sous-classe
B. La super-classe
C. La classe dérivée
D. La classe concrète
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
La super-classe (ou classe parente) est celle qui se situe au-dessus dans la hiérarchie.
QCM
3
Corrigé
Si 'Voiture' hérite de 'Vehicule', quelle est la relation logique entre elles ?
A. Voiture 'est un' Vehicule
B. Vehicule 'est un' Voiture
C. Voiture 'a un' Vehicule
D. Voiture 'contient un' Vehicule
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
L'héritage modélise une relation de spécialisation dite 'EST UN' (IS-A).
QCM
4
Corrigé
Combien de classes parentes une classe Java peut-elle avoir au maximum ?
A. Autant qu'on veut
B. Zéro
C. Deux
D. Une seule
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
Java ne supporte pas l'héritage multiple pour les classes : une classe n'a qu'un seul parent direct.
QCM
5
Corrigé
Quel avantage principal offre l'héritage ?
A. L'accélération de la compilation
B. La réutilisation du code
C. La suppression des variables
D. La sécurité réseau
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Il permet d'utiliser le code déjà écrit dans la classe parente sans le redéfinir.
QCM
6
Corrigé
Lequel de ces éléments une classe enfant ne récupère-t-elle JAMAIS par héritage ?
A. Les méthodes publiques
B. Les attributs protégés
C. Les constructeurs
D. Les méthodes statiques
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Les constructeurs ne sont pas hérités ; ils sont propres à chaque classe.
QCM
7
Corrigé
Quel modificateur d'accès permet à une classe enfant d'accéder à un attribut du parent tout en le cachant aux autres classes ?
A. private
B. protected
C. public
D. static
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
'protected' offre un accès aux sous-classes et aux classes du même package uniquement.
QCM
8
Corrigé
Comment appelle-t-on l'action de redéfinir une méthode du parent dans la classe enfant ?
A. L'encapsulation
B. La surcharge
C. L'instanciation
D. La redéfinition (Overriding)
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
La redéfinition permet de modifier le comportement d'une méthode héritée.
QCM
9
Corrigé
Quel mot-clé est utilisé pour appeler une méthode de la classe parente ?
A. super
B. this
C. parent
D. base
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
'super' fait référence aux membres (méthodes ou constructeurs) de la super-classe.
QCM
10
Corrigé
Si une classe 'Chat' hérite de 'Animal', que peut faire un objet 'Chat' ?
A. Utiliser uniquement les méthodes de Chat
B. Utiliser uniquement les méthodes d'Animal
C. Utiliser les méthodes de Chat et d'Animal
D. Utiliser les méthodes privées d'Animal
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Un objet d'une sous-classe possède ses propres méthodes plus celles héritées du parent.
QCM
11
Corrigé
Que se passe-t-il si une classe ne précise pas de parent avec 'extends' ?
A. Elle n'a pas de parent
B. Elle hérite automatiquement de la classe 'Object'
C. Le code ne peut pas compiler
D. Elle devient une interface
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
En Java, 'Object' est la racine de toute la hiérarchie des classes.
QCM
12
Corrigé
Dans une classe enfant, l'appel à 'super()' dans le constructeur doit se faire :
A. À la toute première ligne
B. À la dernière ligne
C. N'importe où
D. Seulement si la méthode est statique
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
L'appel au constructeur parent doit être la première instruction du constructeur enfant.
QCM
13
Corrigé
Peut-on hériter d'une classe déclarée avec le mot-clé 'final' ?
A. Oui, sans restriction
B. Oui, mais on ne peut pas créer d'objets
C. Non, 'final' empêche toute dérivation
D. Seulement dans le même package
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Une classe 'final' est verrouillée ; elle ne peut pas avoir de sous-classe.
QCM
14
Corrigé
Lequel de ces exemples illustre le mieux l'héritage ?
A. Un moteur fait partie d'une voiture
B. Un étudiant est un type de personne
C. Un livre possède des pages
D. Une télécommande contrôle une télévision
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
L'étudiant spécialise le concept de personne, ce qui correspond à l'héritage.
QCM
15
Corrigé
Si la méthode 'manger()' est private dans 'Animal', un 'Chien' qui hérite d'Animal peut-il l'utiliser ?
A. Non, car private restreint l'accès à la classe d'origine
B. Oui, car tout ce qui est dans le parent est accessible
C. Oui, via le mot-clé super
D. Seulement si le Chien est public
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
Le modificateur 'private' bloque l'accès même aux classes héritières.
QCM
16
Corrigé
Qu'est-ce qu'une classe abstraite ?
A. Une classe qui ne peut pas avoir d'enfants
B. Une classe faite uniquement de méthodes statiques
C. Une classe qui ne peut pas être instanciée (pas d'objet direct)
D. Une classe sans attributs
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Une classe abstraite sert de modèle et doit être étendue pour être utilisée.
QCM
17
Corrigé
Si 'Avion' et 'Bateau' héritent de 'Vehicule', peuvent-ils s'échanger leurs méthodes respectives ?
A. Oui, car ils ont le même parent
B. Non, l'héritage ne fonctionne pas horizontalement entre frères
C. Oui, via un cast automatique
D. Seulement si Vehicule est une interface
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Chaque branche de l'héritage est indépendante des autres branches sœurs.
QCM
18
Corrigé
L'annotation @Override sert à :
A. Forcer l'héritage d'une classe
B. Indiquer au compilateur qu'on redéfinit une méthode parente
C. Créer une nouvelle classe
D. Supprimer une méthode inutile
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Elle permet de vérifier que la méthode existe bien dans le parent, évitant les erreurs de frappe.
QCM
19
Corrigé
Une sous-classe peut-elle ajouter de nouveaux attributs par rapport à sa super-classe ?
A. Oui, elle peut étendre l'état de l'objet
B. Non, elle doit avoir exactement les mêmes attributs
C. Seulement si les attributs sont statiques
D. Seulement si elle n'a pas de méthodes
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
Le but de l'héritage est de spécialiser, donc d'ajouter des données ou comportements spécifiques.
QCM
20
Corrigé
Comment appelle-t-on le sommet de la hiérarchie en Java ?
A. La racine (Root)
B. La classe Master
C. La classe Super
D. La classe Object
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
D
Justification :
Toutes les classes en Java descendent ultimement de java.lang.Object.
QCM
21
Corrigé
Que se passe-t-il si vous essayez d'hériter de deux classes : 'class C extends A, B' ?
A. Le programme fonctionne normalement
B. La classe hérite des méthodes de A seulement
C. Une erreur de compilation se produit
D. Java fusionne les deux parents
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Java n'autorise pas l'héritage multiple de classes pour éviter les conflits d'ambiguïté.
QCM
22
Corrigé
Dans une relation 'Humain extends Mammifere', qui est la classe dérivée ?
A. Mammifere
B. Humain
C. Les deux
D. Aucune des deux
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Classe dérivée, classe enfant et sous-classe sont des synonymes.
QCM
23
Corrigé
Peut-on accéder à un membre 'public' du parent depuis l'enfant ?
A. Oui, sans aucune restriction
B. Non, il faut le redéfinir en protected
C. Uniquement via un accesseur (getter)
D. Seulement si l'enfant est dans le même fichier
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
Les membres publics sont visibles partout, y compris dans toutes les sous-classes.
QCM
24
Corrigé
La classe 'Cercle' hérite de 'Forme'. Si on crée un 'new Cercle()', quel constructeur est appelé en premier ?
A. Celui de Cercle
B. Celui de Forme
C. Celui d'Object
D. Aucun constructeur n'est appelé
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
L'objet parent doit être construit avant que l'objet enfant ne soit finalisé.
QCM
25
Corrigé
Si une méthode est final dans la super-classe :
A. Elle ne peut pas être héritée
B. Elle ne peut pas être redéfinie dans la sous-classe
C. Elle doit obligatoirement être redéfinie
D. Elle devient invisible pour l'enfant
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Le mot-clé 'final' sur une méthode empêche les sous-classes de changer son comportement.
QCM
26
Corrigé
Quel est l'un des risques d'une hiérarchie d'héritage trop profonde ?
A. Le code devient trop simple
B. La mémoire vive s'épuise instantanément
C. Le code devient difficile à maintenir et à comprendre
D. Les fichiers .java deviennent trop petits
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
Une hiérarchie complexe rend le traçage des comportements et des erreurs difficile.
QCM
27
Corrigé
Quelle analogie décrit le mieux une classe parente ?
A. Un plan de construction général
B. Un outil spécifique
C. Une instance unique
D. Une variable locale
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
A
Justification :
La classe parente définit les bases communes, comme un plan général pour plusieurs modèles.
QCM
28
Corrigé
Peut-on utiliser une variable de type 'Vehicule' pour stocker un objet 'Voiture' (si Voiture extends Vehicule) ?
A. Non, les types doivent être identiques
B. Oui, c'est ce qu'on appelle le polymorphisme
C. Uniquement si on utilise le mot-clé static
D. Seulement si Voiture n'a pas de constructeur
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
Un type parent peut toujours référencer un objet enfant.
QCM
29
Corrigé
Dans le schéma de l'héritage, la flèche pointe généralement :
A. De la classe parente vers l'enfant
B. De la classe enfant vers la parente
C. Vers les deux côtés
D. Vers aucune classe
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
B
Justification :
En UML, la flèche d'héritage pointe vers la super-classe.
QCM
30
Corrigé
L'héritage est un pilier de quel paradigme ?
A. La programmation impérative
B. La programmation fonctionnelle
C. La programmation orientée objet (POO)
D. La programmation assembleur
Afficher la réponse
Cliquez pour voir la correction
Réponse correcte :
C
Justification :
L'héritage est l'un des trois concepts fondamentaux de la POO avec l'encapsulation et le polymorphisme.
Mots & Définitions
Consultez les définitions des termes importants.
L’héritage est un mécanisme de la programmation orientée objet qui permet à une classe de reprendre les caractéristiques d’une autre. Il sert à réutiliser du code et à organiser les concepts en hiérarchie. Une classe spécialisée devient une version plus précise d’une classe générale.
extends est le mot-clé Java qui indique qu’une classe hérite d’une autre. Il crée une relation de spécialisation entre une classe enfant et sa classe parente. Grâce à extends, la sous-classe récupère des membres accessibles du parent.
La super-classe est la classe dont une autre classe hérite. Elle contient des attributs et des méthodes communs que l’on souhaite partager. Elle représente généralement une notion plus générale.
La sous-classe est la classe qui hérite d’une super-classe. Elle récupère les éléments accessibles du parent et peut ajouter ses propres attributs et méthodes. Elle représente une version spécialisée du concept.
La relation "est un" décrit la logique de l’héritage : une sous-classe est un type particulier de la super-classe. Elle sert à vérifier si l’héritage est pertinent. Si cette relation n’a pas de sens, l’héritage est souvent un mauvais choix.
super désigne la classe parente dans une sous-classe. Il permet d’appeler un constructeur du parent ou d’accéder à une méthode parente lorsqu’elle est redéfinie. C’est un outil essentiel pour construire correctement l’objet.
super() est l’appel au constructeur de la super-classe. Il doit apparaître en première instruction du constructeur de la sous-classe lorsqu’il est utilisé. Il garantit que la partie héritée de l’objet est initialisée correctement.
Les constructeurs ne sont pas hérités par la sous-classe. En revanche, le constructeur du parent est toujours exécuté lors de la création d’un objet enfant. Cette règle assure une initialisation complète et cohérente.
protected permet de rendre un membre accessible dans la classe et dans ses sous-classes, tout en le cachant aux classes externes non concernées. C’est un compromis entre public et private. Il est souvent utilisé pour faciliter l’héritage sans exposer trop largement.
private limite l’accès d’un membre à la classe qui le déclare. Une sous-classe ne peut pas utiliser directement un membre private du parent. Cette restriction protège fortement les détails internes du parent.
La redéfinition consiste à réécrire dans la sous-classe une méthode héritée du parent. Elle permet d’adapter le comportement à un cas plus spécifique. Le choix de la méthode exécutée dépend du type réel de l’objet.
@Override est une annotation qui indique qu’une méthode redéfinit une méthode de la classe parente. Elle aide le compilateur à détecter les erreurs de signature. Elle rend le code plus clair et plus fiable.
final peut empêcher l’héritage ou la redéfinition selon son usage. Une classe final ne peut pas être étendue. Une méthode final peut être héritée mais ne peut pas être redéfinie.
Une classe abstraite est une classe qui ne peut pas être instanciée directement. Elle sert de base à des sous-classes qui complètent ou spécialisent son comportement. Elle structure la hiérarchie et impose un cadre de conception.
Object est la racine de la hiérarchie des classes en Java. Toute classe hérite indirectement de Object si elle n’étend rien explicitement. Elle fournit des comportements communs comme la comparaison ou l’affichage.
Java utilise un héritage simple : une classe ne peut avoir qu’une seule super-classe. Cela évite certaines ambiguïtés liées à l’héritage multiple. Pour combiner plusieurs comportements, on utilise souvent des interfaces.
Une hiérarchie trop profonde rend le code plus difficile à lire, à tester et à maintenir. Elle complique la compréhension des comportements hérités et redéfinis. Une conception équilibrée privilégie la clarté et la simplicité.
Le polymorphisme permet de manipuler un objet enfant à travers une référence de type parent. Cela facilite l’écriture de code générique et extensible. Le comportement exécuté dépend du type réel de l’objet.
À propos de ce QCM
Cette série de QCM se concentre sur l’héritage en Java, qui permet à une sous-classe de reprendre les éléments accessibles d’une super-classe.
Cette approche facilite la réutilisation de code, en regroupant les comportements communs dans une classe parente, puis en spécialisant certains cas dans des classes enfants.
La relation logique “est un” constitue un repère important pour déterminer si l’héritage est pertinent : une voiture “est un” véhicule, un humain “est un” mammifère, ce qui valide l’idée de spécialisation.
Les QCM abordent également les règles strictes du langage.
Java impose un héritage simple : une classe ne peut avoir qu’une seule super-classe, et toute tentative d’héritage multiple entraîne une erreur de compilation.
Si aucune super-classe n’est précisée, Java rattache automatiquement la classe à Object, la racine de toute la hiérarchie.
La gestion des constructeurs est un point essentiel : les constructeurs ne sont pas hérités, mais le constructeur du parent est toujours exécuté lors de la création d’un objet enfant.
C’est la raison pour laquelle super() doit être placé en première instruction lorsqu’il est utilisé.
Les QCM insistent aussi sur les modificateurs d’accès : public est accessible, private reste enfermé dans la classe d’origine, et protected permet un accès réservé aux sous-classes tout en évitant une exposition trop large.
Enfin, la redéfinition de méthodes (overriding) et l’annotation @Override permettent d’adapter le comportement dans la sous-classe.
Le mot-clé final introduit des restrictions : une classe final ne peut pas être étendue, et une méthode final ne peut pas être redéfinie.
La notion de polymorphisme complète l’ensemble en montrant qu’une référence de type parent peut contenir un objet enfant, ce qui rend le code plus flexible.
Les QCM mettent aussi en garde contre les hiérarchies trop profondes, souvent difficiles à maintenir.
Conclusion
Ces QCM offrent un entraînement complet pour comprendre les règles et les bonnes pratiques de l’héritage en Java.
Ils permettent de maîtriser la relation entre classes, les contraintes du langage, l’accès aux membres, la redéfinition et le rôle fondamental de super.
En s’exerçant régulièrement, l’utilisateur consolide sa logique orientée objet, améliore la qualité de ses conceptions et gagne en confiance face aux hiérarchies de classes.
Cette progression est essentielle pour réussir les évaluations et construire des applications plus propres, maintenables et évolutives.