Junior — Middle
Můžete vysvětlit princip dědičnosti a jak je implementován v jazyce Go?
sobes.tech AI
Odpověď od AI
V jazyce Go neexistuje klasické dědičnosti jako v jiných objektově orientovaných jazycích. Místo toho Go používá kompozici a embedding (vložení) pro opakované použití kódu a rozšíření funkčnosti.
Embedding umožňuje začlenit jeden typ (strukturu) do jiného a metody vloženého typu jsou dostupné pro vnější typ, což připomíná dědičnost.
Příklad:
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return "..."
}
// Vložíme Animal do Dog
type Dog struct {
Animal
}
func (d Dog) Speak() string {
return "Haf!"
}
func main() {
dog := Dog{Animal{Name: "Buddy"}}
fmt.Println(dog.Name) // Přístup k poli Animal
fmt.Println(dog.Speak()) // Přepsaná metoda
}
Tímto způsobem Go dosahuje efektu podobného dědičnosti pomocí kompozice a embeddingu, čímž se vyhýbá složitostem klasické hierarchie.