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正在吃饭
",p.Name)
}
func (p *Person)Drink(){
	fmt.Printf("%s正在痛饮
",p.Name)
}
func (p *Person)Sleep(){
	fmt.Printf("%s正在睡觉
",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
",w.Name,w.Skill,w.OutPut)
	return w.OutPut
}
func (w *Worker)Rest(){
	fmt.Printf("%s正在休息
",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
",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
杰克马正在休息
隆平哥正在吃饭
隆平哥正在痛饮
隆平哥正在睡觉

  

原文地址:https://www.cnblogs.com/yunweiqiang/p/11933118.html