GO语言面向对象07---面向对象练习02
package main import "fmt" /*
·定义接口IPerson,定义吃喝睡三个抽象方法;
·定义一个IPerson的实现类Person,实现吃喝睡方法;
·定义IWorker劳动者接口,拥有劳动方法Work()(output string)其中output是其工作产出,和休息方法Rest();
·IWorker实现三个不同职业的子类:程序员Coder、老师Teacher、农民Farmer,并创建一个Worker的集合;
·程序员、老师、农民都有姓名属性,也都有技能属性;
·实现周一到周五全体工作,如果是周六日程序员工作,老师休息,农民吃喝睡;
*/ type IPerson interface {
Eat()
Drink()
Sleep()
} type IWorker interface {
//IPerson
Work()(output string)
Rest()
} type Person struct {
Name string
Age int
} func (p *Person)Eat(){
fmt.Printf("%s正在吃饭\n",p.Name)
}
func (p *Person)Drink(){
fmt.Printf("%s正在痛饮\n",p.Name)
}
func (p *Person)Sleep(){
fmt.Printf("%s正在睡觉\n",p.Name)
} type Worker struct {
Person
Skill string
OutPut string
Hours int
Zhicheng string
} func (w *Worker)Work()(output string){
fmt.Printf("%s正在%s,并将产出%s\n",w.Name,w.Skill,w.OutPut)
return w.OutPut
}
func (w *Worker)Rest(){
fmt.Printf("%s正在休息\n",w.Name)
} type Coder struct {
Person
Worker
} type Teacher struct {
Person
Worker
} type Farmer struct {
Person
Worker
} func main() {
workers := make([]IWorker, 0)
workers = append(workers, &Coder{Person:Person{Name:"比尔"},Worker:Worker{Person:Person{Name:"比尔"},Skill:"撸码艺术",OutPut:"BUG"}})
workers = append(workers, &Teacher{Person:Person{Name:"杰克马"},Worker:Worker{Person:Person{Name:"杰克马"},Skill:"教书",OutPut:"人才"}})
workers = append(workers, &Farmer{Person:Person{Name:"隆平哥"},Worker:Worker{Person:Person{Name:"隆平哥"},Skill:"种地",OutPut:"粮食"}}) for i:=1;i<=7 ;i++ {
fmt.Printf("今天星期%d\n",i)
if i<=5{
for _,w := range workers{
w.Work()
}
}else {
/*for _,w := range workers{
switch w.(type) {
case *Coder:
w.Work()
case *Teacher:
w.Rest()
case *Farmer:
farmer := w.(*Farmer)
farmer.Eat()
farmer.Drink()
farmer.Sleep()
}
}*/
for _,w := range workers{
if coder,ok:=w.(*Coder);ok{
coder.Work()
}else if teacher,ok:=w.(*Teacher);ok{
teacher.Rest()
}else if farm,ok:=w.(*Farmer);ok{
farm.Eat()
farm.Drink()
farm.Sleep()
}
}
}
fmt.Println()
}
}
输出:
今天星期1
比尔正在撸码艺术,并将产出BUG
杰克马正在教书,并将产出人才
隆平哥正在种地,并将产出粮食 今天星期2
比尔正在撸码艺术,并将产出BUG
杰克马正在教书,并将产出人才
隆平哥正在种地,并将产出粮食 今天星期3
比尔正在撸码艺术,并将产出BUG
杰克马正在教书,并将产出人才
隆平哥正在种地,并将产出粮食 今天星期4
比尔正在撸码艺术,并将产出BUG
杰克马正在教书,并将产出人才
隆平哥正在种地,并将产出粮食 今天星期5
比尔正在撸码艺术,并将产出BUG
杰克马正在教书,并将产出人才
隆平哥正在种地,并将产出粮食 今天星期6
比尔正在撸码艺术,并将产出BUG
杰克马正在休息
隆平哥正在吃饭
隆平哥正在痛饮
隆平哥正在睡觉 今天星期7
比尔正在撸码艺术,并将产出BUG
杰克马正在休息
隆平哥正在吃饭
隆平哥正在痛饮
隆平哥正在睡觉
GO语言面向对象07---面向对象练习02的更多相关文章
- JavaSE学习总结第06天_Java语言基础2 & 面向对象1
06.01 二维数组概述和格式1的讲解 二维数组概述:二维数组其实就是一个元素为一维数组的数组 格式1:数据类型[][] 变量名 = new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- 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.更自然一些. 在本节中 ...
- python面向对象07/异常处理
python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...
- Python之面向对象:面向对象基础
一.面向过程.面向对象对比 1.面向过程 根据业务逻辑从上到下写垒代码 2.函数式思想 将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 3.面向对象 对函数进行分类和封装 1.2.3一步 ...
- PHP之面向对象PHP之面向对象(面向对象是什么)
PHP之面向对象(面向对象是什么) 一.总结 一句话总结: 面向对象就是类:类都要 属性 和 方法 比如人:属性比如身高体重,方法比如吃饭喝水 面向对象中 ,方法即是函数 : 属性即是变量 ,只是面相 ...
随机推荐
- 经典论文系列| 实例分割中的新范式-SOLO
前言: 这是实例分割中的一篇经典论文,以往的实例分割模型都比较复杂,这篇论文提出了一个简单且直接的实例分割模型,如何设计这种简单直接的模型且要达到一定的精度往往会存在一些困难,论文中有很多思路或思想值 ...
- 模拟退火算法Python编程(3)整数规划问题
1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...
- pc/shouji/weixin判断跳转
pc 和 手机端 判断 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android&q ...
- hdu4847 水题
题意: 你看了上面很长很长的一片英语课文之后,发现根本不用看,直接看输入输出就行了,就是给你一坨字符串,然后问你里面有几个doge(不区分大小写). 思路: 没啥说的,直接写吧 ...
- hdu3400 两重三分
题意: 题意给你两个公路 A-B C-D 和三个速度V(ab) V(cd) 和 V(两条公路之间) 问你从A到D的最短时间是多少. 思路: 一开始暴力了其中的一条边,每次加0.01,另 ...
- 使用Windows全局钩子打造键盘记录器
简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...
- (CV学习笔记)看图说话(Image Captioning)-2
实现load_img_as_np_array def load_img_as_np_array(path, target_size): """从给定文件[加载]图像,[缩 ...
- Linux(CentOS-8)安装MySQL8.0.11
CentOS安装MySQL8.0.11 总的思路就是:安装MySQL,编写配置文件,配置环境变量,成功开启服务,登陆并修改ROOT密码 开启远程访问的思路就是:授权用户所有IP都可以访问,系统的数据库 ...
- C++ scanf_s()函数的用法以及注意事项
前身--scanf() 有的教材里用的scanf(),其实在目前Visual Studio版本中已经弃用了,用scanf_s()函数代替了. 为什么现在要用scanf_s() scanf_s()函数是 ...
- 2021.02.21cf补题
B. National Project 题意:总长度为n的公路进行维修,天气是有规律性的,连续g天的好天气,连续b天的坏天气,必须在好天气进行维护,问至少维护n的一半,那么至少需要多少天 思路:必须是 ...