Menu
Coddy logo textTech

La classe Object

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 24 sur 87.

En Java, chaque classe que vous créez hérite automatiquement d'une classe spéciale appelée Object. Même si vous n'écrivez pas extends nulle part, votre classe est toujours une enfant de Object. Cela fait de Object la racine de toute la hiérarchie des classes.

public class Person {
    // Cela étend implicitement Object
}

// Est équivalent à :
public class Person extends Object {
}

Parce que chaque classe hérite de Object, chaque objet en Java a accès à plusieurs méthodes intégrées. Les plus couramment utilisées incluent :

MéthodeObjectif
toString()Retourne une représentation sous forme de chaîne de caractères de l'objet
equals(Object obj)Compare deux objets pour vérifier leur égalité
hashCode()Retourne une valeur de code de hachage pour l'objet
getClass()Retourne la classe d'exécution de l'objet

Par défaut, ces méthodes ont des implémentations génériques. Par exemple, toString() retourne le nom de la classe suivi de l'adresse mémoire de l'objet, ce qui n'est pas très utile :

Person p = new Person();
System.out.println(p.toString());  // Résultat : Person@1a2b3c4d

C'est pourquoi vous remplacerez souvent ces méthodes dans vos propres classes pour fournir un comportement significatif. Comprendre que Object est le parent universel aide à expliquer pourquoi vous pouvez stocker n'importe quel objet dans une variable Object et pourquoi certaines méthodes sont disponibles sur chaque objet que vous créez.

challenge icon

Défi

Facile

Explorons comment la classe Object sert de parent universel à toutes les classes Java en construisant un système d'inventaire de gadgets simple qui démontre les méthodes héritées de Object.

Vous allez créer trois fichiers pour organiser votre code :

  • Gadget.java : Créez une classe représentant un gadget électronique. Votre classe doit avoir :
    • Des champs privés pour name (String) et year (int)
    • Un constructeur qui initialise les deux champs
    • Des méthodes getter getName() et getYear()
    Ne surchargez aucune méthode de Object - nous voulons d'abord voir le comportement par défaut.
  • Smartphone.java : Créez une sous-classe qui étend Gadget et ajoute des fonctionnalités spécifiques aux smartphones :
    • Un champ privé pour brand (String)
    • Un constructeur qui prend name, year et brand - utilisez super(name, year) pour la partie parente
    • Une méthode getBrand() qui retourne la marque
    • Surchargez la méthode toString() pour retourner : Smartphone: [brand] [name] ([year])
  • Main.java : Démontrez la différence entre les méthodes Object par défaut et surchargées. Vous recevrez trois entrées : un nom de gadget, une année et une marque. Créez à la fois un Gadget et un Smartphone en utilisant les mêmes nom et année (plus la marque pour le smartphone), puis :
    • Affichez le nom de la classe du gadget en utilisant getClass().getSimpleName()
    • Affichez si le toString() par défaut du gadget contient le symbole "@" (affichez true ou false)
    • Affichez le smartphone en utilisant sa méthode toString() surchargée

Vous recevrez trois entrées : le nom du gadget/smartphone (String), l'année (int) et la marque (String).

Ce défi montre pourquoi la surcharge des méthodes de Object est importante - le toString() par défaut vous donne quelque chose comme Gadget@1a2b3c, tandis que votre version personnalisée fournit des informations significatives !

Aide-mémoire

En Java, chaque classe hérite automatiquement de la classe Object, ce qui en fait la racine de toute la hiérarchie des classes :

public class Person {
    // Cela étend implicitement Object
}

// Est équivalent à :
public class Person extends Object {
}

Chaque objet en Java a accès à plusieurs méthodes intégrées héritées de Object :

MéthodeObjectif
toString()Retourne une représentation sous forme de chaîne de caractères de l'objet
equals(Object obj)Compare deux objets pour l'égalité
hashCode()Retourne une valeur de code de hachage pour l'objet
getClass()Retourne la classe d'exécution de l'objet

Par défaut, toString() retourne le nom de la classe suivi de l'adresse mémoire de l'objet :

Person p = new Person();
System.out.println(p.toString());  // Sortie : Person@1a2b3c4d

Vous pouvez redéfinir ces méthodes dans vos propres classes pour fournir un comportement significatif. Vous pouvez stocker n'importe quel objet dans une variable Object puisque toutes les classes en héritent.

Essayez vous-même

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lire les entrées
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // consommer le saut de ligne
        String brand = scanner.nextLine();
        
        // TODO: Créer un objet Gadget avec name et year
        
        // TODO: Créer un objet Smartphone avec name, year, et brand
        
        // TODO: Afficher le nom de la classe du gadget en utilisant getClass().getSimpleName()
        
        // TODO: Afficher si le toString() du gadget contient "@" (true ou false)
        
        // TODO: Afficher le smartphone (utilise le toString() redéfini)
        
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet