zoukankan      html  css  js  c++  java
  • 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
    杰克马正在休息
    隆平哥正在吃饭
    隆平哥正在痛饮
    隆平哥正在睡觉
    

      

  • 相关阅读:
    CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
    CYPEESS USB3.0程序解读之---GPIO
    USB 3.0 开发要点
    关于const声明一些东西
    __attribute__ 你知多少?
    char、signed char、unsigned char的区别总结。
    CentOS7安装配置SAMBA服务器
    linux版本FTP下载
    2021年1月29日
    2021年11月28日
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11933118.html
Copyright © 2011-2022 走看看