Chapitre 7 : Classes Abstraites et Interfaces.
I. Quiz (QCM) - Test de connaissances
1. Peut-on créer un objet (instancier) directement à partir d'une classe abstraite ?
A) Oui, comme pour n'importe quelle classe.
B) Oui, mais seulement si elle ne contient aucune méthode abstraite.
C) Non, c'est formellement interdit par le compilateur.
D) Non, sauf si on utilise le mot-clé super.
2. Quel mot-clé est utilisé pour qu'une classe signe le contrat d'une interface ?
A) extends
B) includes
C) implements
D) abstracts
3. Qu'est-ce qui caractérise une méthode déclarée comme abstract ?
A) Elle ne possède pas de corps (pas d'accolades {}) et se termine par un point-
virgule.
B) Elle ne peut pas prendre de paramètres.
C) Elle ne peut être appelée que par la classe mère.
D) Elle doit obligatoirement retourner un type primitif.
4. Quelle affirmation est VRAIE concernant l'héritage multiple en Java ?
A) Une classe peut faire extends sur plusieurs classes.
B) Une classe peut faire implements sur plusieurs interfaces.
C) L'héritage multiple est totalement impossible sous toutes ses formes.
D) Une interface peut implémenter une classe.
5. Depuis Java 8, que permet le mot-clé default dans une interface ?
A) De définir un attribut qui ne peut pas être modifié.
B) De créer une méthode avec du code (un corps) directement dans l'interface.
C) De rendre l'interface instanciable.
D) De cacher l'interface aux autres packages.
II. Exercices d'application
Exercice 1 : La Classe Abstraite
1. Créez une classe abstraite Forme contenant un attribut couleur (String) et un
constructeur pour l'initialiser.
2. Ajoutez une méthode abstraite calculerSurface() qui retourne un double.
3. Créez une classe Carre qui hérite de Forme, possédant un attribut cote.
4. Implémentez la méthode calculerSurface() dans Carre.
Exercice 2 : L'Interface
1. Créez une interface Jouable contenant une méthode jouer().
2. Créez deux classes Guitare et Piano qui implémentent l'interface Jouable.
3. Dans chaque classe, codez la méthode jouer() pour qu'elle affiche un message
spécifique (ex: "La guitare fait grrr" / "Le piano fait plink").
4. Dans un main, créez un tableau de type Jouable contenant une Guitare et un Piano,
puis parcourez-le avec une boucle pour faire jouer() tous les instruments.
III. Les Exercices
Piège n°1 : L'oubli fatal Pourquoi le code de cette classe Voiture refuse-t-il de compiler ?
Java
abstract class Vehicule {
public abstract void demarrer();
}
public class Voiture extends Vehicule {
public void klaxonner() {
[Link]("Tut tut !");
}
}
Piège n°2 : Les variables d'interface Que se passe-t-il si j'essaie d'exécuter ce code dans un
main ?
Java
interface Constantes {
int MAX_VITESSE = 120;
}
public class Test implements Constantes {
public void modifierVitesse() {
MAX_VITESSE = 130;
}
}
Piège n°3 : L'instanciation masquée Ce code est-il valide en Java ?
Java
interface Animal {
void manger();
}
public class Main {
public static void main(String[] args) {
Animal a = new Chat(); // En supposant que Chat implements Animal
[Link]();
}
}