Exercice 1 sur 4
Ta première classe
Une classe est un plan de construction pour des objets :
class Chien {
String nom;
}
Tu crées un objet avec new :
Chien c = new Chien();
c.nom = "Rex";
Mets la marque de la voiture à BMW avant qu'elle soit affichée.
Code de départ
void main() {
Voiture v = new Voiture();
// Mets v.marque à "BMW"
IO.println(v.marque);
}
class Voiture {
String marque;
}
Contexte
POO — programmation orientée objet
Java est un langage orienté objet. L'idée : tu modélises le monde sous forme d'objets avec des propriétés (attributs) et un comportement (méthodes). Une Voiture a une marque et peut rouler().
Les quatre piliers de la POO : abstraction, encapsulation, héritage et polymorphisme. Tu vas les découvrir petit à petit.
Exercice 2 sur 4
Constructeur
Au lieu de définir les valeurs une par une, tu utilises un constructeur — une méthode spéciale qui s'exécute à la création de l'objet :
class Chien {
String nom;
Chien(String nom) {
this.nom = nom;
}
}
this.nom = l'attribut de la classe. nom = le paramètre.
Complète le constructeur de la classe Voiture.
Code de départ
void main() {
Voiture v = new Voiture("Tesla");
IO.println(v.marque);
}
class Voiture {
String marque;
Voiture(String marque) {
// Mets this.marque à la valeur du paramètre marque
}
}
Contexte
this — la référence à soi-même
this désigne l'objet courant. Dans le constructeur, tu as besoin de this.marque = marque; parce que le paramètre marque porte le même nom que l'attribut. Sans this, Java croirait que tu affectes le paramètre à lui-même — et l'attribut reste à null.
Astuce : beaucoup de développeurs Java donnent exprès aux paramètres le même nom que les attributs et utilisent this. — c'est un style courant.
Exercice 3 sur 4
Méthodes dans une classe
Les classes peuvent avoir leurs propres méthodes :
class Chien {
String nom;
String aboyer() {
return nom + " fait Ouaf !";
}
}
La méthode peut accéder aux attributs de la classe — pas besoin de paramètres.
Complète la méthode info() : elle doit renvoyer [marque], [ch] ch.
Code de départ
void main() {
Voiture v = new Voiture("BMW", 150);
IO.println(v.info());
}
class Voiture {
String marque;
int ch;
Voiture(String marque, int ch) {
this.marque = marque;
this.ch = ch;
}
String info() {
// Renvoie "[marque], [ch] ch"
return "";
}
}
Contexte
toString() — la méthode universelle
En Java, chaque classe hérite de Object et possède une méthode toString(). Quand tu appelles println(objet), objet.toString() est appelée automatiquement.
Sans ton propre toString(), tu obtiens un truc du genre Voiture@1a2b3c — le nom de la classe plus le hash code de l'objet en hexadécimal (pas une adresse mémoire, même si ça y ressemble). C'est pour ça qu'on redéfinit presque toujours toString().
Exercice 4 sur 4
Héritage
Une classe peut hériter d'une autre — elle reprend tous ses attributs et méthodes :
class Animal { String nom; }
class Chien extends Animal { String race; }
Chien a maintenant nom (hérité d'Animal) et race.
Dans le constructeur, tu appelles super() pour exécuter le constructeur de la classe parente.
Complète le constructeur de VoitureElectrique : appelle super(marque) et définis autonomie.
Code de départ
void main() {
VoitureElectrique e = new VoitureElectrique("Tesla", 500);
IO.println(e.marque + ", " + e.autonomie + " km");
}
class Voiture {
String marque;
Voiture(String marque) { this.marque = marque; }
}
class VoitureElectrique extends Voiture {
int autonomie;
VoitureElectrique(String marque, int autonomie) {
// Appelle super(marque)
// Définis this.autonomie
}
}
Contexte
Héritage et hiérarchie de classes
En Java, une classe ne peut hériter que d'une seule classe (héritage simple). Pour l'« héritage multiple », il y a les interfaces — des contrats abstraits qu'une classe peut implémenter.
Pendant longtemps, super() devait être la toute première instruction d'un constructeur. Depuis Java 25, tu as le droit de placer quelques instructions avant (par exemple pour vérifier les paramètres), tant qu'elles ne touchent pas à this. Le principe reste le même : la partie parente de l'objet est initialisée avant que la classe fille travaille avec ses propres attributs. Mettre super() en premier reste le style habituel.