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
    杰克马正在休息
    隆平哥正在吃饭
    隆平哥正在痛饮
    隆平哥正在睡觉
    

      

  • 相关阅读:
    JVM
    SpringDataES
    Lucene
    linux下如何实现mysql数据库每天自动备份定时备份
    java的finalize()函数
    Java代码优化(长期更新)
    HashMap实现原理及源码分析
    Java中的equals和hashCode方法详解
    java中JVM的原理
    Java程序员应该了解的10个设计原则
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11933118.html
Copyright © 2011-2022 走看看