Go语言基础(十三)—— Go面向对象简单小练习

练习要求:

接口->父类实现->多种子类实现->多态

  1. 定义接口IPerson,定义吃喝睡三个抽象方法;

  2. 定义一个IPerson的实现类Person,实现吃喝睡方法;

  3. 定义IWorker劳动者接口,拥有劳动方法Work()(output string)其中output是其工作产出,和休息方法Rest();

  4. IWorker实现三个不同职业的子类:程序员Coder、老师Teacher、农民Farmer,并创建一个Worker的集合;

  5. 实现周一到周五全体工作,如果是周六日程序员工作其他人休息;

案例实现:

package main

import "fmt"

//定义IPerson接口
type IPerson interface {
	Eat();
	Drink();
	Sleep();
}

//定义Person结构体
type Person struct {
	name string
}

//Person实现接口的Eat方法
func (pp *Person) Eat() {
	fmt.Println("我是Person,这是我的eat方法")
}

//Person实现接口的Drink方法
func (pp *Person) Drink() {
	fmt.Println("我是Person,这是我的Drink方法")
}

//Person实现接口的Sleep方法
func (pp *Person) Sleep() {
	fmt.Println("我是Person,这是我的Sleep方法")
}

//定义IWorker接口
type IWorker interface {
	Work() (output string);
	Rest()
}

//coder实现类
type Coder struct {
	Person
}

//Coder实现IWorker的Work方法
func (coder *Coder) Work() (output string) {
	fmt.Println("I am Coder,this is my Work method!")
	return "代码"
}

//Coder实现Rest方法
func (coder *Coder) Rest() {
	fmt.Println("I am Coder,this is my Rest method!")
}

//teacher实现类
type Teacher struct {
	Person
}

//Teacher实现work方法
func (teacher *Teacher) Work() (output string) {
	fmt.Println("I am teacher ,this my Work method !")
	return "students"
}

//Teacher实现Rest方法
func (teacher *Teacher) Rest() {
	fmt.Println("I am teacher ,this my Rest method !")
}

//farmer 实现类
type Farmer struct {
	Person
}

//Farmer实现work方法
func (farmer *Farmer) Work() (output string) {
	fmt.Println("I am Farmer,this is my work method !")
	return "foods"
}

//Farmer实现Rest方法
func (farmer *Farmer) Rest() {
	fmt.Println("I am Farmer,this is my Rest method !")
}

func main() {
	//声明结构体
	var coder Coder
	var teacher Teacher
	var farmer Farmer
	
	
	coder.name = "wek"
	teacher.name = "wrr"
	farmer.name = "WEK"
	
	//声明IWorker接口方面统一管理
	worker := make([]IWorker, 0)
	worker = append(worker, &coder)
	worker = append(worker, &teacher)
	worker = append(worker, &farmer)

	//如果是工作日,则所有人工作
	fmt.Println("今天是工作日")
	for _, workers := range worker {
		workers.Work()
	}

	//如果是休息日,则只有coder工作,其余人休息
	fmt.Println("今天是休息日")
	for _, workers := range worker {
		if _, ok := workers.(*Coder); ok {
			workers.Work()
		} else {
			workers.Rest()
		}
	}
}

结果为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值