package main

import "fmt"

/*
定义动物接口:死、活着
定义动物实现类:鸟、鱼、野兽(跑、捕食)
继承野兽:实现老虎,实现人
业务场景:工作日所有动物都活着、周末人出来捕食,野兽逃跑,其它动物死光光
*/ type Animal interface {
Live()
Godie()
} type BaseAnimal struct {
Name string
} func (ba *BaseAnimal)Live() {
fmt.Printf("%s正在活着\n",ba.Name)
} func (ba *BaseAnimal)Godie() {
fmt.Printf("%s狗带\n",ba.Name)
} type Bird struct {
BaseAnimal
} //鸟鱼兽继承BaseAnimal,少写大量通用的生死方法,同时还获得了Name属性
type Fish struct {
BaseAnimal
} type Beast struct {
BaseAnimal
} func (b *Beast)Run() {
fmt.Printf("野兽%s正在奔跑\n",b.Name)
} func (b *Beast)Hunt() {
fmt.Printf("野兽%s正在捕食\n",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:\n",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---面向对象练习01的更多相关文章

  1. JavaSE学习总结第06天_Java语言基础2 & 面向对象1

      06.01 二维数组概述和格式1的讲解 二维数组概述:二维数组其实就是一个元素为一维数组的数组 格式1:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  2. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  3. Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法

    Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...

  4. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  5. C++对C语言的非面向对象特性扩充(3)

    今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...

  6. Golang 入门系列(五)GO语言中的面向对象

    前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category/ ...

  7. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  8. 2018.3.5 Java语言基础与面向对象编程实践

    Java语言基础与面向对象编程实践 第一章 初识Java 1.Java特点 http://www.manew.com/blog-166576-20164.html Java语言面向对象的 Java语言 ...

  9. 怎样在C语言里实现“面向对象编程”

    有人觉得面向对象是C++/Java这样的高级语言的专利,实际不是这样.面向对象作为一种设计方法.是不限制语言的.仅仅能说,用C++/Java这样的语法来实现面向对象会更easy.更自然一些. 在本节中 ...

  10. # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结

    095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

随机推荐

  1. 数据结构之LinkedList | 让我们一块来学习数据结构

    highlight: monokai theme: vue-pro 上一篇文章中使用列表(List)对数据排序,当时底层储存数据的数据结构是数组.本文将讨论另外一种列表:链表.我们会解释为什么有时链表 ...

  2. WordPress 缩率图学习笔记

    WordPress 缩率图学习笔记 Wordpress在生成缩略图的过程中,有两种不同的规则 缩放模式:缩放模式就是将图片等比例缩小,且新生成的缩略图长度或高度两者之中,有一个是你设置的缩略图的尺寸 ...

  3. 微信小程序 icon组件详细介绍

    这些是提供的所支持的图标样式,根据需求在此基础上去修改大小和颜色. 主要属性: 使用方式: wxml <!--成功图标--> <icon type="success&quo ...

  4. 【ElasticSearch】ES线上脏数据处理

    ES分组 GET index_user_latest/_search { "aggs": { "group_by_tags": { "terms&qu ...

  5. [ssh登录]ssh登录报警

    1.报警脚本 mkdir /scripts vim /scripts/telegram_ssh.sh #!/bin/bash text="用户: $PAM_USER 用户IP: $PAM_R ...

  6. hdu 3721 树的最小直径

    题意:       给你一棵树,让你改变一条边,改变之后依然是一棵树,然后问你怎样改变才能让树的直径最短.这里的改变一条边指的是指把一条边长度不变,连在别的两个点上. 思路:       首先求出树的 ...

  7. Redis—简单动态字符串(SDS)

    目录 Redis-简单动态字符串(SDS) SDS的定义 SDS与C字符串的区别 1. 常数复杂度获取字符串长度: 2. 杜绝缓冲区溢出: 3. 减少修改字符串时带来的内存重分配次数 4. 二进制安全 ...

  8. (Py练习)判断101-200之间的素数个数并输出

    判断素数的方法之一:用一个数分别去除以2到squrt(这个数),如果能被整除,则不是素数. import math h = 0 leap = 1 for m in range(101, 201): k ...

  9. 如何在C艹大作业上用复数计算器拿下一个100分

    0. qt qt简介: 百度百科 下载:官网下载 申请个账号就可以免费用了 安装方式可以在百度上找到,建议安装MinGW,其余自选. 1. 建立第一个qt文件 打开Qt Creator,点击文件,点击 ...

  10. PowerDesigner16安装和使用

    安装 安装参考链接:PowerDesigner安装教程 因为这个博主已经操作的很详细了,这边就不做过多的赘述. 使用 新建模型 选择物理模型 调出面板Palette 建表 最终的效果(一般不在数据库层 ...