Back to questions
VK
Middle
5
Как интерфейсы в Go позволяют реализовывать полиморфизм без явного указания на наследование?
Companies where asked
Answer from AI
sobes.tech AI
В Go интерфейсы определяют набор методов, которые должен реализовать тип, но не требуют явного указания наследования. Любой тип, реализующий методы интерфейса, автоматически считается его реализацией. Это позволяет добиться полиморфизма — можно работать с разными типами через общий интерфейс, не связывая их иерархией классов.
Пример:
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct {}
func (d Dog) Speak() string {
return "Woof!"
}
type Cat struct {}
func (c Cat) Speak() string {
return "Meow!"
}
func saySomething(s Speaker) {
fmt.Println(s.Speak())
}
func main() {
d := Dog{}
c := Cat{}
saySomething(d) // Woof!
saySomething(c) // Meow!
}
Здесь Dog и Cat не связаны наследованием, но оба реализуют интерфейс Speaker, что позволяет использовать их полиморфно.