étend le mot-clé en Java
Le mot-clé extends
en Java est utilisé pour indiquer qu'une classe hérite d'une superclasse. Il s'agit d'un aspect fondamental de la programmation orientée objet en Java, qui permet à une nouvelle classe d'hériter des champs et des méthodes d'une classe existante.
Utilisation
Le mot-clé extends
est utilisé dans les déclarations de classes pour établir une relation d'héritage entre deux classes.
Syntax
class SubclassName extends SuperclassName {
// class body
}
SubclassName
: Le nom de la nouvelle classe dont on hérite.SuperclassName
: Le nom de la classe existante dont on hérite.
Exemples
Exemple 1 : Héritage de base
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // Inherited method
dog.bark(); // Method of Dog class
}
}
Dans cet exemple, la classe Dog
étend la classe Animal
en héritant de sa méthode eat
. La classe Dog
possède également sa propre méthode bark
. Lorsqu'une instance de Dog
est créée, la méthode héritée eat
et la méthode bark
peuvent être appelées.
Exemple 2 : Surcharge des méthodes
class Animal {
void sound() {
System.out.println("This animal makes a sound.");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("The cat meows.");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sound(); // Overridden method
}
}
Ici, la classe Cat
étend la classe Animal
et remplace la méthode sound
pour fournir sa propre implémentation. L'annotation @Override
est utilisée pour indiquer que la méthode est surchargée.
Exemple 3 : Héritage des champs
class Person {
String name;
}
class Employee extends Person {
int employeeId;
}
public class Main {
public static void main(String[] args) {
Employee emp = new Employee();
emp.name = "John Doe"; // Inherited field
emp.employeeId = 12345;
System.out.println("Name: " + emp.name + ", Employee ID: " + emp.employeeId);
}
}
Dans cet exemple, la classe Employee
étend la classe Person
et hérite du champ name
. La classe Employee
possède également son propre champ employeeId
.
Conseils et bonnes pratiques
- Utilisez l'héritage avec discernement: L'héritage doit être utilisé lorsqu'il existe une relation claire entre la sous-classe et la superclasse.
- Remplacez correctement les méthodes: Utilisez l'annotation
@Override
lorsque vous surchargez des méthodes pour vous assurer que vous surchargez correctement une méthode de la superclasse. - Évitez les hiérarchies d'héritage profondes: Les hiérarchies d'héritage profondes peuvent rendre le code difficile à comprendre et à maintenir. Préférez la composition à l'héritage lorsque c'est nécessaire.
- Accéder aux méthodes de la superclasse: Utilisez
super
pour appeler les méthodes de la superclasse à partir de la sous-classe si nécessaire.class Animal { void eat() { System.out.println("This animal eats food."); } } class Dog extends Animal { void eat() { super.eat(); // Call superclass method System.out.println("The dog eats dog food."); } }
- Enchaînement de constructeurs: Utilisez
super()
pour appeler le constructeur de la superclasse à partir du constructeur de la sous-classe.class Person { Person(String name) { System.out.println("Person's name is " + name); } } class Employee extends Person { Employee(String name, int employeeId) { super(name); // Call superclass constructor System.out.println("Employee ID is " + employeeId); } }
Comprendre l'héritage
L'héritage est un concept clé de la programmation orientée objet (POO) qui établit une relation entre une superclasse plus générale et une sous-classe plus spécifique. Cette relation permet à la sous-classe d'hériter des attributs et des méthodes de la superclasse, ce qui favorise la réutilisation du code et la structuration logique.
- Relation Is-A: Le mot-clé
extends
signifie qu'il s'agit d'une relation "is-a". Par exemple, unDog
est unAnimal
, et unEmployee
est unPerson
. - Héritage unique: Java prend en charge l'héritage unique, ce qui signifie qu'une classe ne peut étendre qu'une seule autre classe afin d'éviter toute ambiguïté et complexité.
- Combinaison d'extensions et d'implémentations: Une classe peut étendre une autre classe et implémenter plusieurs interfaces simultanément. Cette combinaison permet à une classe d'hériter d'une superclasse et d'adhérer à plusieurs contrats définis par des interfaces.
class Animal {
void move() {
System.out.println("This animal moves.");
}
}
interface Pet {
void play();
}
class Dog extends Animal implements Pet {
void bark() {
System.out.println("The dog barks.");
}
public void play() {
System.out.println("The dog plays.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.move(); // Inherited method from Animal
dog.bark(); // Method of Dog class
dog.play(); // Implemented method from Pet interface
}
}
Dans cet exemple, la classe Dog
étend la classe Animal
et met en œuvre l'interface Pet
, ce qui illustre la combinaison de l'héritage et de la mise en œuvre de l'interface.