Go语言以匿名组合的方式实现继承
2016-03-15 10:18
846 查看
type Base struct { FirstName, LastName string Age float32 } func (base *Base) HasFeet() { fmt.Println(base.FirstName + base.LastName + "has feet! Base") } func (base *Base) Flying() { fmt.Println("Base Can flying!") } type Sub struct { Base Area string } func (sub *Sub) Flying() { sub.Base.Flying() fmt.Println("Sub flying") } func main() { chk := new(Sub) chk.Flying() chk2 := &Sub{Base{"Bob", "Steven", 2.0}, "China"} fmt.Println(chk2.Area) }
这里要特别注意,如果“子类”重写了“基类”的成员方法,需要在子类的成员方法中调用基类的同名成员方法,一定要以
sub.Base.Flying()这样显式的方法调用,而不是使用
sub.Flying()这种调用继承方法的方式调用,这样会出现无限循环,即一直在调用子类的方法。
func (sub *Sub) Flying() { sub.Flying() // 无限调用自己 fmt.Println("Sub flying") // 永远不会执行到这里 }
相关文章推荐
- sougou word library TXT download
- Go语言学习笔记
- Mac系统搭建Go语言Sublime Text 2环境配置
- Graceful Restart in Golang
- Django入门(八) cookie和session
- XP下的进程静音技术(遍历进程,遍历输入模块,遍历输入函数,找到函数并HOOK) good
- Django的请求流程(url)
- UVALive 6665 Dragonâs Cruller(BFS+优先队列+康拓展开)
- Go语言核心之美 1.2-变量及声明篇
- 无知造就对阿法狗(AlphaGo)的恐惧与喧闹
- 我与小娜(36):人机大战第五局,AlphaGo必胜!
- 使用hugo搭建博客
- 第55课:实战Hive分析搜索引擎的数据
- google官方的下拉刷新控件SwipeRefreshLayout
- 人机大战中AlphaGo及其执子人黄士杰
- AlphaGo实现论文阅读笔记一
- 图片处理方法汇总imagemagick-Golang
- [golang note] 协程基础
- Django Model 查询
- Django入门(七) django的缓存