Java Inheritance
L'héritage Java est un concept fondamental de la programmation orientée objet qui permet à une nouvelle classe d'hériter des propriétés et des comportements (champs et méthodes) d'une classe existante. Cela favorise la réutilisation du code et établit une relation hiérarchique entre les classes.
Concepts clés
- Superclasse (classe mère): La classe dont les propriétés et les méthodes sont héritées.
- Sous-classe (classe enfantine): La classe qui hérite de la superclasse.
Utilisation
L'héritage est utilisé pour créer une nouvelle classe qui est un type d'une classe existante. Il permet d'étendre les fonctionnalités d'une classe sans la modifier, respectant ainsi le principe ouvert/fermé de la conception des logiciels.
Syntax
class Superclass {
// fields and methods
}
class Subclass extends Superclass {
// additional fields and methods
}
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 InheritanceExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // Inherited method
dog.bark(); // Subclass method
}
}
Dans cet exemple, Dog
est une sous-classe qui hérite de la méthode eat
de la superclasse Animal
. La classe Dog
possède également sa propre méthode, bark
.
Exemple 2 : Surcharge des méthodes
class Vehicle {
void run() {
System.out.println("The vehicle is running.");
}
}
class Car extends Vehicle {
@Override
void run() {
System.out.println("The car is running safely.");
}
}
public class MethodOverridingExample {
public static void main(String[] args) {
Car car = new Car();
car.run(); // Overridden method
}
}
Ici, la classe Car
remplace la méthode run
de la classe Vehicle
pour fournir une implémentation spécifique.
Exemple 3 : L'utilisation super
Keyword
class Person {
String name = "John";
void display() {
System.out.println("Person's name: " + name);
}
}
class Employee extends Person {
String name = "Doe";
void display() {
System.out.println("Employee's name: " + name);
super.display(); // Call superclass method
}
}
public class SuperKeywordExample {
public static void main(String[] args) {
Employee emp = new Employee();
emp.display();
}
}
Dans cet exemple, le mot-clé super
est utilisé pour appeler la méthode display
de la superclasse Person
à partir de la sous-classe Employee
.
Conseils et bonnes pratiques
- Utilisez l'héritage avec discernement: N'utilisez l'héritage que lorsqu'il existe une véritable relation "is-a". Par exemple, un
Dog
est unAnimal
. - Évitez les hiérarchies d'héritage profondes: Les hiérarchies d'héritage doivent être peu profondes afin de préserver la simplicité et de réduire la complexité.
- Préférez la composition à l'héritage: Envisagez d'utiliser la composition (relation has-a) au lieu de l'héritage lorsque c'est nécessaire, car elle offre plus de flexibilité.
- Utilisez
@Override
Annotation: Utilisez toujours l'annotation@Override
lorsque vous remplacez des méthodes afin d'améliorer la lisibilité du code et d'éviter les erreurs. - Contrôle d'accès: Utilisez le modificateur d'accès
protected
pour les membres de la superclasse qui doivent être accessibles aux sous-classes mais pas au monde extérieur.