zoukankan      html  css  js  c++  java
  • GO语言面向对象06---面向对象练习01

    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:
    伯德狗带
    尼莫狗带
    野兽泰格正在奔跑
    野兽大官人正在捕食
    

      

  • 相关阅读:
    phpcms V9实现QQ登陆OAuth2.0
    PHP程序员的技术成长规划(送给迷茫的你)
    php实现冒泡排序
    php实现堆排序
    网络抓包以及进行简单数据分析
    网络编程之套接字(tcp)
    网络编程之套接字(udp)
    C语言之位运算
    linux线程及互斥锁
    嵌入式常用英文缩写及单词整理
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11925686.html
Copyright © 2011-2022 走看看