可以使用 embedded 对象的字段和方法,就好自己的一样;但是,毕竟不是继承。
专栏的介绍可以参考 《GotchaGolang专栏》,代码可以看《宝库-Gotcha》。
Golang 没有继承大家都知道,但是就是面不了拿内嵌对象当做继承结构用。
案例
直接上代码:
1 | package main |
但是 child 对象调用 getInfo 方法就会编译报错,毕竟不是 parent 类型,也不会强制类型转换:
1 | fmt.Println(getInfo(c)) |
报错: cannot use c (type *child) as type *parent in argument to getInfo
。
这个时候,还是用 interface{} 吧,内部再做运行时类型检查就可以了。
总结
虽然内嵌类型可以当做继承来看待,多数时候也适用;但是内嵌毕竟不是继承。组合就是组合
。
Merlin 2018.3 内嵌的坑