GO语言面向对象06---面向对象练习01
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的更多相关文章
- JavaSE学习总结第06天_Java语言基础2 & 面向对象1
06.01 二维数组概述和格式1的讲解 二维数组概述:二维数组其实就是一个元素为一维数组的数组 格式1:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字
081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
- C++对C语言的非面向对象特性扩充(3)
今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...
- Golang 入门系列(五)GO语言中的面向对象
前面讲了很多Go 语言的基础知识,包括go环境的安装,go语言的语法等,感兴趣的朋友可以先看看之前的文章.https://www.cnblogs.com/zhangweizhong/category/ ...
- Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)
Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...
- 2018.3.5 Java语言基础与面向对象编程实践
Java语言基础与面向对象编程实践 第一章 初识Java 1.Java特点 http://www.manew.com/blog-166576-20164.html Java语言面向对象的 Java语言 ...
- 怎样在C语言里实现“面向对象编程”
有人觉得面向对象是C++/Java这样的高级语言的专利,实际不是这样.面向对象作为一种设计方法.是不限制语言的.仅仅能说,用C++/Java这样的语法来实现面向对象会更easy.更自然一些. 在本节中 ...
- # 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封装 ...
随机推荐
- BB网络层测试
网络层测试2020 问题 1 以下不属于网络层的协议是___A_______. A DHCP B ICMP C IGMP D ARP 10 分 问题 2 如果目的网络.目的主机都对,但是 ...
- [Java] 数据类型, 变量, 运算符, 表达式
title: [Java] 变量与表达式 你已经学会输出 Hello world 了, 那么现在, 我们来学习关于变量的知识 基本数据类型 在 Java 中, 有 8 种基本的数据类型: 名称 描述 ...
- hdu4974 简单题
题意: 一个人看比赛,这些比赛一共有n个人参与,每一场有两个人比,然后每一场之后这个人都会给比赛的这两个人打分,最多1最少0,比如看完了A,B两人比赛,他可能给这两个人分别的分数是00,1 ...
- hdu4885 有 限制的最短路
题意: 给你起点终点,和一些加油站,和每次加油后的最大行驶距离,问你从起点到终点最少加油次数,要求两点之间必须走直线,见到加油站必须加油,也就是说如果想从a走到b,那么a,b连线上的加油站 ...
- WinDBG 调试命令大全
转载收藏于:http://www.cnblogs.com/kekec/archive/2012/12/02/2798020.html #调试命令窗口 ++++++++++++++++++++++++ ...
- 手撸了一个starter,同事直夸我666~
Spring Boot starter原理 Spring Boot 将常见的开发功能,分成了一个个的starter,这样我们开发功能的时候只需要引入对应的starter,而不需要去引入一堆依赖了!st ...
- liunx中文件夹不能删除怎么操作
1.运行rm -rf 文件名称 2.不能删除对应文件并且提示"rm: cannot remove './.user.ini': Operation not permitted" 操 ...
- Govern EventBus - 历经多年生产环境验证的事件驱动架构框架
Govern EventBus Govern EventBus 是一个历经四年生产环境验证的事件驱动架构框架, 通过事件总线机制来治理微服务间的远程过程调用. 使用本地事务来支持微服务内强一致性,事件 ...
- DLL注入技术(输入法注入)
输入法注入原理 IME输入法实际就是一个dll文件(后缀为ime),此dll文件需要导出必要的接口供系统加载输入法时调用.我们可以在此ime文件的DllMain函数的入口通过调用LoadLibrary ...
- I/O流以及文件的基本操作
文件操作: 文件操作其实就是一个FIle类:我们学习文件操作就是学习File类中的方法: 文件基操: 第一部分:学习文件的基本操作(先扒源码以及文档) Constructor Description ...