GO语言面向对象06---面向对象联系
Posted yunweiqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO语言面向对象06---面向对象联系相关的知识,希望对你有一定的参考价值。
package main import "fmt" /* 定义动物接口:死、活着 定义动物实现类:鸟、鱼、野兽(跑、捕食) 继承野兽:实现老虎,实现人 业务场景:工作日所有动物都活着、周末人出来捕食,野兽逃跑,其它动物死光光 */ type Animal interface { Live() Godie() } type BaseAnimal struct { Name string } func (ba *BaseAnimal)Live() { fmt.Printf("%s正在活着 ",ba.Name) } func (ba *BaseAnimal)Godie() { fmt.Printf("%s狗带 ",ba.Name) } type Bird struct { BaseAnimal } //鸟鱼兽继承BaseAnimal,少写大量通用的生死方法,同时还获得了Name属性 type Fish struct { BaseAnimal } type Beast struct { BaseAnimal } func (b *Beast)Run() { fmt.Printf("野兽%s正在奔跑 ",b.Name) } func (b *Beast)Hunt() { fmt.Printf("野兽%s正在捕食 ",b.Name) } type Tiger struct { Beast } type Human struct { Beast } func main() { animals := make([]Animal, 0) animals = append(animals, &Bird{BaseAnimal{"伯德"}}) animals = append(animals, &Fish{BaseAnimal{"尼莫"}}) animals = append(animals, &Tiger{Beast{BaseAnimal{"泰格"}}}) animals = append(animals, &Human{Beast{BaseAnimal{"大官人"}}}) for i:=1;i<=7 ;i++ { fmt.Printf("今天星期%d: ",i) if i<=5{ for _,a:=range animals{ a.Live() } }else{ for _,a := range animals{ if human,ok := a.(*Human);ok{ human.Hunt() }else if tiger,ok := a.(*Tiger);ok { //断言为Beast是定位不到Tiger的,因为丢入容器时丢的是老虎对象,因此只能断言为老虎 tiger.Run() }else{ a.Godie() } } } fmt.Println() } }
输出:
今天星期1: 伯德正在活着 尼莫正在活着 泰格正在活着 大官人正在活着 今天星期2: 伯德正在活着 尼莫正在活着 泰格正在活着 大官人正在活着 今天星期3: 伯德正在活着 尼莫正在活着 泰格正在活着 大官人正在活着 今天星期4: 伯德正在活着 尼莫正在活着 泰格正在活着 大官人正在活着 今天星期5: 伯德正在活着 尼莫正在活着 泰格正在活着 大官人正在活着 今天星期6: 伯德狗带 尼莫狗带 野兽泰格正在奔跑 野兽大官人正在捕食 今天星期7: 伯德狗带 尼莫狗带 野兽泰格正在奔跑 野兽大官人正在捕食
以上是关于GO语言面向对象06---面向对象联系的主要内容,如果未能解决你的问题,请参考以下文章