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

      

  • 相关阅读:
    Nutch的配置(使用MySQL作为数据存储)
    MySQL简单实现多字段模糊查询
    nutch的一些基础整理
    Java分布式爬虫Nutch教程——导入Nutch工程,执行完整爬取
    Nutch2 WebPage写入数据库的过程分析
    Nutch2 WebPage 字段解释
    nutch如何修改regex-urlfilter.txt爬取符合条件的链接
    Run Nutch In Eclipse on Linux and Windows nutch version 0.9
    Linux Mint 17.1 安装全配置
    Ubuntu(Linux Mint):sudo apt-get upgrade升级失败
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11933118.html
Copyright © 2011-2022 走看看