Ce programme définit une classe de base appelée Animal avec une méthode appelée animalSound(). Les classes Pig et Dog étendent la classe Animal et surchargent la méthode animalSound() pour renvoyer des chaînes différentes. Dans la méthode main(), nous créons trois objets en utilisant les références de la classe de base Animal. Les objets sont créés en utilisant les sous-types Pig et Dog, et la méthode animalSound() est appelée pour chaque objet. Les sorties sont les suivantes : class Animal { public void animalSound() { System.out.println("L'animal fait un son"); } } class Pig extends Animal { public void animalSound() { System.out.println("Grognement de cochon"); } } class Dog extends Animal { public void animalSound() { System.out.println("Aboiement de chien"); } } public class Main { public static void main(String[] args) { Animal myAnimal = new Animal(); // Animal référence Animal myPig = new Pig(); // Pig est un sous-type d'Animal Animal myDog = new Dog(); // Dog est un sous-type d'Animal myAnimal.animalSound(); myPig.animalSound(); myDog.animalSound(); } } En Java, le mot clé this est utilisé pour faire référence à l'objet courant dans lequel une méthode ou un constructeur est appelé. Par exemple, si vous avez une classe Animal avec des attributs name et type, vous pouvez utiliser this pour faire référence à ces attributs dans les méthodes de la classe : class Animal { String name; String type; public Animal(String name, String type) { this.name = name; this.type = type; } public void printDetails() { System.out.println("Nom : " + this.name); System.out.println("Type : " + this.type); } } Le programme suivant définit une classe Animal avec deux constructeurs. Le premier constructeur Animal(String name) utilise this pour appeler le deuxième constructeur Animal(String name, String type) avec une valeur par défaut pour le type de l'animal. La méthode printDetails() utilise this pour faire référence aux attributs name et type de l'objet courant. Dans la méthode main(), nous créons deux objets Animal en utilisant les deux constructeurs différents. Nous appelons ensuite la méthode printDetails() pour chaque objet pour afficher les détails de l'animal. La sortie de ce programme sera la suivante : Nom : Piggy Type : Inconnu Nom : Doggy Type : Chien class Animal { private String name; private String type; public Animal(String name) { this(name, "Inconnu"); } public Animal(String name, String type) { this.name = name; this.type = type; } public void printDetails() { System.out.println("Nom : " + this.name); System.out.println("Type : " + this.type); } } public class Main { public static void main(String[] args) { Animal animal1 = new Animal("Piggy"); Animal animal2 = new Animal("Doggy", "Chien"); animal1.printDetails(); System.out.println(); animal2.printDetails(); } }