1. java-hell.de
  2. Thèmes
  3. Classes et objets
Thème 8 sur 11

Apprendre les classes et objets en Java – POO

Place à l'orienté objet. Tu crées ta première classe, tu écris un constructeur, tu donnes des méthodes à tes objets et tu fais hériter des classes les unes des autres : la base de presque tous les projets Java.

Les exercices

Ce que tu vas apprendre dans ce thème

  1. Ta première classe
  2. Constructeur
  3. Méthodes dans une classe
  4. Héritage
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.

Assez lu. À toi de jouer.

Dans le tutoriel, tu écris le code toi-même, tu cliques sur Exécuter et tu vois tout de suite si ton programme marche. Sans JDK, sans IDE, sans prise de tête.

S'entraîner sur Classes et objets dans le navigateur