Sobes.tech
Middle

Quelle méthode ne peut pas être redéfinie en programmation orientée objet?

sobes.tech IA

Réponse de l'IA

Dans certains langages, comme Ruby, la méthode de classe initialize, utilisée pour initialiser de nouveaux objets, ne peut pas être appelée directement dans une classe fille comme super.initialize pour exécuter la logique de la classe parente. À la place, la classe fille doit explicitement appeler la méthode super dans sa mise en œuvre de initialize, ce qui invoque automatiquement la méthode initialize de la classe parente.

Dans d'autres langages, comme Java ou C#, il n'existe pas de "méthodes" utilisateur qui ne peuvent pas être surchargées dans le sens traditionnel, car toute méthode publique ou protégée (!) qui n'est pas marquée comme final (Java) ou sealed (C#) peut être surchargée. Cependant, on peut considérer que les constructeurs sont un type spécial de "méthode" qui ne peut pas être surchargé dans le sens habituel : il n'est pas possible de déclarer une méthode avec le même nom et la même signature dans une classe fille qui remplacerait le constructeur de la classe parente. La classe fille peut avoir ses propres constructeurs, qui appellent à leur tour les constructeurs de la classe parente via super (Java) ou : base (C#).

class Parent {
    Parent() {
        System.out.println("Constructeur de la classe parente");
    }
    void method() {
        System.out.println("Méthode de la classe parente");
    }
}

class Child extends Parent {
    Child() {
        // L'appel explicite au constructeur du parent n'est pas nécessaire,
        // si aucun paramètre n'est utilisé, il est appelé automatiquement.
        System.out.println("Constructeur de la classe enfant");
    }
    @Override // La surcharge de méthode est possible
    void method() {
        System.out.println("Méthode de la classe enfant");
    }
}

Ainsi, en général, on peut considérer que les constructeurs sont des méthodes qui ne peuvent pas être surchargées dans le même sens que les méthodes ordinaires.