Junior — Middle
Cum determină compilatorul ce metod specific să fie apelat în cazul suprasarcinii sau suprascrierii?
sobes.tech AI
Răspuns de la AI
În Go, nu există suprasarcină de metode în sensul clasic, ca în C++ sau Java. Fiecare metodă sau funcție are un nume unic în pachet. Dacă există mai multe funcții cu același nume, dar cu parametri diferiți, acest lucru va cauza o eroare de compilare.
În ceea ce privește suprascrierea, Go folosește interfețe: dacă un tip implementează metodele unei interfețe, atunci la apelul prin interfață, metoda tipului concret va fi apelată.
Astfel, alegerea metodei are loc în timpul compilării, pe baza numelui și semnăturii funcției, iar apelul dinamic prin interfață este determinat de tipul obiectului în timpul execuției.
Exemplu:
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() // Va afișa Woof
s = Cat{}
s.Speak() // Va afișa Meow
}