Sobes.tech
Junior — Middle

Hoe bepaalt de compiler welke specifieke methode moet worden aangeroepen bij overbelasting of overschrijving?

sobes.tech AI

Antwoord van AI

In Go is er geen method overloading in de klassieke zin, zoals in C++ of Java. Elke methode of functie heeft een unieke naam in het pakket. Als er meerdere functies met dezelfde naam maar verschillende parameters zijn, zal dit een compileerfout veroorzaken.

Wat betreft overriding, Go gebruikt interfaces: als een type de methoden van een interface implementeert, wordt bij het aanroepen via de interface de methode van het concrete type aangeroepen.

Dus, de keuze van de methode gebeurt tijdens compilatie op basis van de naam en de handtekening van de functie, en de dynamische aanroep via de interface wordt bepaald door het type van het object tijdens runtime.

Voorbeeld:

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() // Drukt Woof af
    s = Cat{}
    s.Speak() // Drukt Meow af
}