Sobes.tech
Назад к вопросам
Middle
6

Как интерфейсы в Go позволяют реализовывать полиморфизм без явного указания на наследование?

Компании, где спрашивали
VKVK

Ответ от нейросети

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, что позволяет использовать их полиморфно.