Héritage de base (extends)
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy. Leçon 20 sur 87.
L'héritage est l'un des piliers fondamentaux de la POO. Il permet à une classe d'acquérir les propriétés et les méthodes d'une autre classe, favorisant ainsi la réutilisation du code et établissant une hiérarchie naturelle entre les classes.
En Java, tu crées une relation d’héritage à l’aide du mot-clé extends. La classe qui hérite est appelée la sous-classe (ou classe enfant), et la classe dont elle hérite est appelée la super-classe (ou classe parent).
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating");
}
public String getName() {
return name;
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name); // Appelle le constructeur parent
}
public void bark() {
System.out.println(getName() + " says woof!");
}
}La classe Dog hérite automatiquement de la méthode eat() et de la méthode getName() de Animal. Elle peut également définir ses propres méthodes comme bark() :
Dog myDog = new Dog("Buddy");
myDog.eat(); // Hérité : "Buddy is eating"
myDog.bark(); // Sa propre méthode : "Buddy says woof!"Considérez l'héritage comme une relation « est un ». Un Dog est un Animal, il est donc logique que Dog étende Animal. Cette relation vous permet de construire des classes spécialisées qui partagent des fonctionnalités communes tout en ajoutant leurs propres comportements uniques.
Défi
FacileConstruisons un système simple de véhicules qui démontre l’héritage en pratique. Vous allez créer une classe parente qui contient les propriétés communes aux véhicules, ainsi qu’une classe enfant qui l’étend avec un comportement spécialisé.
Vous organiserez votre code sur trois fichiers :
Vehicle.java: créez la classe parente qui représente n’importe quel véhicule. Elle doit avoir :- Un champ privé pour la
branddu véhicule (String) - Un constructeur qui accepte le nom de la marque et l’affecte au champ. (Aucun appel à
super()n’est nécessaire ici, puisque Vehicle se trouve au sommet de la hiérarchie.) - Une méthode
getBrand()qui renvoie la marque - Une méthode
start()qui affiche :[brand] is starting
- Un champ privé pour la
Motorcycle.java: créez une sous-classe qui étend Vehicle. Une moto est un véhicule, cette relation « est-un » rend donc l’héritage approprié. Votre Motorcycle doit :- Utiliser
extendspour hériter de Vehicle - Avoir un constructeur qui accepte la marque et la transmet à la classe parente à l’aide de
super(brand) - Ajouter sa propre méthode
wheelie()qui affiche :[brand] is doing a wheelie!
- Utiliser
Main.java: assemblez le tout en créant un objet Motorcycle et en démontrant à la fois les comportements hérités et les comportements qui lui sont propres. Vous recevrez une entrée : le nom de la marque. Affichez deux lignes en appelant :- La méthode héritée
start() - La propre méthode
wheelie()de Motorcycle
- La méthode héritée
Vous recevrez une entrée : le nom de la marque (String) de votre moto.
Remarquez que votre Motorcycle a automatiquement accès à start() et getBrand() sans avoir à les réécrire : c’est toute la puissance de l’héritage !
Essayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String brand = scanner.nextLine();
// TODO: Créer un objet Motorcycle avec la marque brand
// TODO: Appeler la méthode héritée start()
// TODO: Appeler la méthode wheelie()
}
}
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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron ItérateurEntraînez-vous par vous-même : Compilateur Java en ligne