struct的继承问题

package main

import "fmt"

type People struct{}

func (p *People) ShowA() {
    fmt.Println("showA")
    p.ShowB()
}
func (p *People) ShowB() {
    fmt.Println("showB")
}

type Teacher struct {
    People
}

func (t *Teacher) ShowB() {
    fmt.Println("teacher showB")
}

func main() {
    t := Teacher{}
    t.ShowA()
}

为何输出的是: showA showB

已邀请:

wuxc

赞同来自:

因为ShowA是他组件People的方法,调的时候传入的receiver是个People

sheepbao - https://sheepbao.github.io 爱go,爱编程,领域网络开发,流媒体、分布式、网络加速

赞同来自:

Teacher 嵌入了people,有了people的方法,而ShowA只有people才有,当然t.ShowA()会用到people的方法了

littledriver

赞同来自:

我记得 golang 中是没有继承这种说法的吧。struct 实现的 oop 基本和 c 语言是一个思路,利用的是组合,而不是继承

golwei

赞同来自:

就只是执行了

func (p *People) ShowA() {
    fmt.Println("showA")
    p.ShowB()
}

plain

赞同来自:

package main

import "fmt"

type Show interface{
    ShowB()
}

type People struct{
    Show
}

func (p* People) ShowA() {
    fmt.Println("showA")
    p.Show.ShowB()
}

func (p* People) ShowB() {
    fmt.Println("showB")
}

type Teacher struct {
    People
}

func (t *Teacher) ShowB() {
    fmt.Println("teacher showB")
}

func main() {
    t := Teacher{}
    t.Show = &t
    t.ShowA()
}

tpkeeper - Software Engineer. Gopher. [ tpkeeper.me@gmail.com ]

赞同来自:

  1. 先执行了
    func (p *People) ShowA() {
    fmt.Println("showA")
    p.ShowB()
    }
  2. ShowA()中有p.ShowB()这个方法,但是p 是 *People 类型的,所以也就执行了
    func (p *People) ShowB() {
    fmt.Println("showB")
    }

要回复问题请先登录注册