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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/The_Reader/article/details/84490097

练习要求:

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

  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()
		}
	}
}

结果为:

猜你喜欢

转载自blog.csdn.net/The_Reader/article/details/84490097
今日推荐