Sobes.tech
Middle

Qu'est-ce que l'héritage et le polymorphisme dans le contexte des types de données de référence?

sobes.tech IA

Réponse de l'IA

L'héritage est un mécanisme permettant de créer une nouvelle classe (dérivée, fille), qui hérite des champs et méthodes d'une classe existante (de base, parent). Cela favorise la réutilisation du code et la création de hiérarchies de classes.

Le polymorphisme est la capacité d'objets de différentes classes à se comporter de manière uniforme ou à avoir des comportements différents lors de l'appel d'une même méthode. On distingue deux types principaux : statique (surcharge de méthodes) et dynamique (surcharge de méthodes).

Dans le contexte des types de données de référence, l'héritage permet de créer une variable de la classe de base qui peut faire référence à un objet de la classe dérivée. Le polymorphisme dans ce cas se manifeste lorsque, en appelant une méthode via cette variable, la version de la méthode du type réel de l'objet est exécutée, et non celle du type de la référence (polymorphisme dynamique).

Exemple en Java :

// Classe de base
class Animal {
    public void makeSound() {
        System.out.println("Émet un son");
    }
}

// Classe dérivée 1
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Ouaf-ouaf");
    }
}

// Classe dérivée 2
class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Miaou-miaou");
    }
}

class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // Variable de type Animal référant à un objet Dog
        Animal myCat = new Cat(); // Variable de type Animal référant à un objet Cat

        myDog.makeSound(); // Appelle la méthode de Dog (polymorphisme)
        myCat.makeSound(); // Appelle la méthode de Cat (polymorphisme)
    }
}

Dans cet exemple, myDog et myCat ont un type de référence Animal, mais grâce au polymorphisme, lors de l'appel à makeSound(), la mise en œuvre correspondante de Dog et Cat est exécutée.