6.1 – Héritage
Qu'est-ce que l'héritage en programmation orientée objet ?
Quel mot-clé est utilisé en Java pour qu'une classe hérite d'une autre ?
Quels éléments une classe fille hérite-t-elle de la classe mère ?
Combien de classes mères une classe peut-elle avoir en Java ?
Quel est le résultat de ce code :
public class Personne {
protected String nom;
public void sePresenter() {
System.out.println("Je suis " + nom);
}
}
public class Etudiant extends Personne {
private String numeroEtudiant;
}
Etudiant e = new Etudiant();
e.nom = "Alice";
e.sePresenter();
À quoi sert le mot-clé super en Java ?
OĂą doit se trouver l'appel super() dans un constructeur de classe fille ?
Quel est le résultat de ce code :
public class Personne {
protected String nom;
public Personne(String nom) {
this.nom = nom;
System.out.println("Personne créée");
}
}
public class Etudiant extends Personne {
public Etudiant(String nom) {
super(nom);
System.out.println("Etudiant créé");
}
}
Etudiant e = new Etudiant("Alice");
Quelle est la différence entre this et super ?
Que se passe-t-il si une classe mère n'a pas de constructeur par défaut et qu'on ne appelle pas super() explicitement dans la classe fille ?
6.2 – Polymorphisme
Qu'est-ce que la redéfinition (overriding) en Java ?
Quelle annotation est recommandée pour indiquer qu'on redéfinit une méthode ?
Quelles sont les règles de redéfinition d'une méthode ?
Qu'est-ce que la surcharge (overloading) en Java ?
Quelle est la différence principale entre surcharge et redéfinition ?
Quel est le résultat de ce code :
public class Personne {
public void sePresenter() {
System.out.println("Personne");
}
}
public class Etudiant extends Personne {
@Override
public void sePresenter() {
System.out.println("Etudiant");
}
}
Personne p = new Etudiant();
p.sePresenter();
Quel est le résultat de ce code :
public class Calculatrice {
public int additionner(int a, int b) {
return a + b;
}
public double additionner(double a, double b) {
return a + b;
}
}
Calculatrice calc = new Calculatrice();
int resultat = calc.additionner(5, 3);
Peut-on créer une surcharge en changeant uniquement le type de retour ?
Quand la résolution de la méthode est-elle effectuée pour la surcharge et la redéfinition ?
6.3 – Polymorphisme dans une hiérarchie d'objets
Qu'est-ce que le polymorphisme dans une hiérarchie d'objets ?
Qu'est-ce que la liaison dynamique (dynamic binding) ?
Quel est le résultat de ce code :
public class Animal {
public void faireDuBruit() {
System.out.println("Bruit");
}
}
public class Chien extends Animal {
@Override
public void faireDuBruit() {
System.out.println("Wouf");
}
}
Animal a = new Chien();
a.faireDuBruit();
Quels sont les avantages du polymorphisme ?
Quel est le résultat de ce code :
public class Personne {
String nom = "Personne";
public void afficher() {
System.out.println("Nom : " + nom);
}
}
public class Etudiant extends Personne {
String nom = "Etudiant";
@Override
public void afficher() {
System.out.println("Nom : " + nom);
}
}
Personne p = new Etudiant();
System.out.println(p.nom);
p.afficher();
Le polymorphisme fonctionne-t-il pour les attributs ?
Quel est le résultat de ce code :
public class Personne {
public void sePresenter() {
System.out.println("Personne");
}
}
public class Etudiant extends Personne {
@Override
public void sePresenter() {
System.out.println("Etudiant");
}
}
public class Professeur extends Personne {
@Override
public void sePresenter() {
System.out.println("Professeur");
}
}
Personne[] personnes = {
new Personne(),
new Etudiant(),
new Professeur()
};
for (Personne p : personnes) {
p.sePresenter();
}