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封装 ...
随机推荐
- IDEA 2021版新建Maven、TomCat工程
目录 2021版IDEA中Maven.TomCat配置 1.基于Webapp创建一个Maven项目 1.1 新建项目模板 1.2 指定名称 1.3 指定信息 1.4 指定Maven地址 1.5 构建成 ...
- 1019 General Palindromic Number
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- Win64 驱动内核编程-24.64位驱动里内嵌汇编
64位驱动里内嵌汇编 讲道理64位驱动是不能直接内链汇编的,遇到这种问题,可以考虑直接把机器码拷贝到内存里,然后直接执行. 获得机器码的方式,可以写好代码之后,直接通过vs看反汇编,然后根据地址在看内 ...
- Linux-鸟菜-0-计算机概论
Linux-鸟菜-0-计算机概论 这一章在说计算机概论,额....,总的来说看完之后还是有点收获,回忆了下计算机基本知识.没有什么可上手操作的东西,全是概念,直接把最后的总结给截图过来吧,因为概念的话 ...
- java8中的Optional
Optional类主要解决空指针异常NullPointerException.Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一 ...
- 快速运行cmd
方法一 运行 windows+r 输入cmd 指定要手动输入cd ...... 方法二 文件地址栏 在指定路径在文件地址栏前面输入cmd 方法三 shift+鼠标右键 打开到指定文件夹,shift+鼠 ...
- Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路
前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...
- SparkSQL电商用户画像(五)之用户画像开发(客户基本属性表)
7.电商用户画像开发 7.1用户画像--数据开发的步骤 u 数据开发前置依赖 -需求确定 pv uv topn -建模确定表结构 create table t1(pv int,uv int,topn ...
- Codeforces Round #697 (Div. 3)
A.Odd Divisor 题意:问一个数是不是含有奇数因子 思路:就直接给这个数循环除以2,看看最后剩下的数是不是0,如果不是就有奇数因子,如果是就没有 想不到:1)当时想着用log2来解决问题,后 ...
- JSX语法详解
一.基础1.JSX是什么JSX是一种像下面这样的语法: const element = <h1>Hello, world!</h1>;1它是一种JavaScript语法扩展,在 ...