4-6 面向对象综合练习

本文介绍了一个使用Go语言实现的简单动物模拟器,通过定义不同的动物类型如鸟类、鱼类、野兽、老虎和人类,并实现了它们的生活习性和死亡状态。模拟器通过随机选择动物展示其活动,展示了Go语言的多态性和接口的使用。
摘要由CSDN通过智能技术生成
package main

import (
    "fmt"
    "math/rand"
    "time"
)

type Animals interface {
    Live()
    Godie()
}
type Bird struct {
}

func (b *Bird) Live() {
    fmt.Println("一只鸟儿在飞翔")
}
func (b *Bird) Godie() {
    fmt.Println("一只鸟儿死翘翘")
}

type Fish struct {
}

func (f *Fish) Live() {
    fmt.Println("一只鱼儿在游泳")
}
func (f *Fish) Godie() {
    fmt.Println("一只鱼儿死翘翘")
}

type Beast struct {
}

func (b *Beast) Live() {
    fmt.Println("一只野兽在打滚")
}
func (b *Beast) Godie() {
    fmt.Println("一只野兽死翘翘")
}

func (b *Beast) Run() {
    fmt.Println("一个野兽在奔跑")
}
func (b *Beast) Hunt() {
    fmt.Println("一个野兽在捕食")
}

type tiger struct {
    Beast
}

func (t *tiger) Live() {
    fmt.Println("本王在巡视领地")
}

func (t *tiger) Godie() {
    fmt.Println("大猫也有godie的一天")
}

func (t *tiger) Run() {
    fmt.Println("本王在奔跑")
}
func (t *tiger) Hunt() {
    fmt.Println("本王在捕食")
}

type human struct {
    Beast
}

func (h *human) Live() {
    fmt.Println("广东人在工作")
}

func (h *human) Godie() {
    fmt.Println("人去世了")
}

func (h *human) Run() {
    fmt.Println("广东人在跑步")
}
func (h *human) Hunt() {
    fmt.Println("广东人在吃饭")
}

func main() {
    bird := Bird{}
    fish := Fish{}
    beast := Beast{}
    t := tiger{beast}
    h := human{beast}

    animals := make([]Animals, 0)
    animals = append(animals, &bird, &fish, &beast, &t, &h)
    r := rand.New(rand.NewSource(time.Now().UnixNano()))
    rand := r.Intn(7)
    fmt.Println(rand)

    if rand > 0 && rand < 6 {
        for _, animal := range animals {
            animal.Live()
        }
    } else {
        for _, animal := range animals {

            //使用第一种类型断言
            //switch animal.(type) {
            //case *human:
            //    //父类转子类
            //    //animal使用human的方法
            //    animal.(*human).Hunt()
            //case *Beast:
            //    //animal使用beast的方法
            //    animal.(*Beast).Run()
            //default:
            //    animal.Godie()
            //}

            //第二种类型断言的方法
            if human,ok := animal.(*human);ok {
                human.Hunt()
            }else if beast,ok:=animal.(*Beast);ok{
                beast.Hunt()
            }else {
                animal.Godie()
            }
        }
    }


}

 

转载于:https://www.cnblogs.com/paad/p/11097001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值