版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/The_Reader/article/details/84490097
练习要求:
接口->父类实现->多种子类实现->多态
-
定义接口IPerson,定义吃喝睡三个抽象方法;
-
定义一个IPerson的实现类Person,实现吃喝睡方法;
-
定义IWorker劳动者接口,拥有劳动方法Work()(output string)其中output是其工作产出,和休息方法Rest();
-
IWorker实现三个不同职业的子类:程序员Coder、老师Teacher、农民Farmer,并创建一个Worker的集合;
-
实现周一到周五全体工作,如果是周六日程序员工作其他人休息;
案例实现:
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()
}
}
}
结果为: