Golang嵌入,覆盖方法多态

时间:2019-07-10 15:03:30

标签: go polymorphism

假设我在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虚拟方法和多态性的面向语言?我真的要避免在Sub中也实现OuterDo(),因为现实世界的情况要复杂得多,而且嵌套更深。

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")
}

0 个答案:

没有答案