返回信息流看代码吧
type Base struct {
a int
}
func (b *Base) Print() {
b.GetName()
}
func (b *Base) GetName() {
fmt.Println("Base")
}
type Derive struct {
Base
}
func (d *Derive) GetName() {
fmt.Println("Derive")
}
func main() {
a := new(Base)
b := new(Derive)
a.Print() // Base
b.Print() // Base
fmt.Println("恭喜开版!")
}
使用embeded struct的方式实现的类继承,是不能做到通过基类的方法调用到派生类的方法的。
这是一条镜像帖。来源:北邮人论坛 / golang / #132同步于 2016/6/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖
go 语言面向对象的问题
inaadversity
2016/6/8镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
lz这种估计要通过interface调用才行
我还遇到过更奇葩的
【 在 inaadversity 的大作中提到: 】
: 看代码吧
: [code=py]
: type Base struct {
: ...................
你的这个例子恰好证明了通过interface调用也是不行的,实际上是同一个问题
【 在 KajiRyouji 的大作中提到: 】
: lz这种估计要通过interface调用才行
: 我还遇到过更奇葩的
: [upload=1][/upload]
: ...................
不是,实际上这是个语法糖。
相当于b.Base.Print()。你也可以显示的这样调用
当你在b中定义了一个Print以后,b.Print就是b的了,但是依然可以用b.Base.Print来调用
【 在 b78859793 的大作中提到: 】
: 不是,实际上这是个语法糖。
: 相当于b.Base.Print()。你也可以显示的这样调用
: 当你在b中定义了一个Print以后,b.Print就是b的了,但是依然可以用b.Base.Print来调用
+1