Golang Embedding, метод переопределения полиморф - PullRequest
0 голосов
/ 10 июля 2019

Предположим, у меня есть следующий код в Go: Go Playground

У меня есть структура Base и структура Sub, и я хочу переопределить функцию в структуре Base (innerDo()).

Используя x = &Sub{&Base{}}, экземпляр Sub x имеет все методы Base, и вызов x.InnerDo() потребует реализации Sub этой функции. Однако, если вызов выполняется транзитивно с использованием x.OuterDo(), который затем вызывает x.InnerDo(), используется функциональность Base.

Если у меня нет контроля над кодом Base и я хочу переопределить функцию, могу ли я в любом случае сделать вызов OuterDo(), вызывающий Sub * innerDo, как в объектно-ориентированных языках с виртуальными методами а полиморфим? Я действительно хотел бы избежать также реализации OuterDo() в Sub, поскольку реальный случай намного сложнее и глубже вложен.

type Definition interface {
    InnerDo()
    OuterDo()
}

var x Definition

func main() {
    x = &Sub{&Base{}}
    x.OuterDo()
}

type Base struct {}

func (b *Base) InnerDo() {
    fmt.Println("Base")
}

func (b *Base) OuterDo() {
    b.InnerDo()
}

type Sub struct {
    *Base
}

func (b *Sub) InnerDo() {
    fmt.Println("Sub")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...