Sobes.tech
Junior — Middle

Comment le compilateur détermine-t-il quel méthode spécifique appeler en cas de surcharge ou de redéfinition?

sobes.tech IA

Réponse de l'IA

En Go, il n'y a pas de surcharge de méthodes au sens classique, comme en C++ ou Java. Chaque méthode ou fonction a un nom unique dans le package. S'il y a plusieurs fonctions avec le même nom mais des paramètres différents, cela entraînera une erreur de compilation.

En ce qui concerne la redéfinition, Go utilise des interfaces : si un type implémente les méthodes d'une interface, alors lors de l'appel via l'interface, la méthode du type concret sera appelée.

Ainsi, la sélection de la méthode se fait lors de la compilation en fonction du nom et de la signature de la fonction, et l'appel dynamique via l'interface est déterminé par le type de l'objet lors de l'exécution.

Exemple :

package main
import "fmt"

type Speaker interface {
    Speak()
}

type Dog struct{}
func (d Dog) Speak() { fmt.Println("Woof") }

type Cat struct{}
func (c Cat) Speak() { fmt.Println("Meow") }

func main() {
    var s Speaker
    s = Dog{}
    s.Speak() // Affiche Woof
    s = Cat{}
    s.Speak() // Affiche Meow
}