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 - 爱go,爱编程,专注网络开发,流媒体、分布式、网络加速,欢迎讨论listomebao@gmail.com

赞同来自:

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

要回复问题请先登录注册