2021-09-16 11:25:02
浏览数 (1)
- 接口:只有方法的定义,没有实现——全部是抽象方法
- 实现接口:结构体实现接口的全部抽象方法,称为结构体实现了接口
- 多态:一个父类/接口有不同的子类实现,本例中【劳动者接口】的具体实现有【程序员】、【产品经理】、【老板】
- 共性:【程序员】、【产品经理】、【老板】都会劳动和休息
- 个性:【程序员】、【产品经理】、【老板】的劳动方式和休息方式
各不相同
代码语言:javascript
复制package main
import (
"fmt"
)
/*
接口:只有方法的定义,没有实现——全部是抽象方法
实现接口:结构体实现接口的全部抽象方法,称为结构体实现了接口
多态:一个父类/接口有不同的子类实现,本例中【劳动者接口】的具体实现有
【程序员】、【产品经理】、【老板】
共性:【程序员】、【产品经理】、【老板】都会劳动和休息
个性:【程序员】、【产品经理】、【老板】的劳动方式和休息方式
各不相同
*/
type Worker interface {
Work(hour int) (product string)
Rest()
}
type Coder struct {
skill string
}
func (w *Coder)Work(hour int) (product string) {
fmt.Printf("码农一天工作%d个小时n",hour)
fmt.Printf("码农正在%sn",w.skill)
return "Bug"
}
func (w *Coder) Rest() {
fmt.Printf("休息是什么?n")
}
func (w *Coder)WorkHome() {
fmt.Println("程序员在家工作")
}
type ProductManager struct {
skill string
}
func (w *ProductManager)Work(hour int) (product string) {
fmt.Printf("产品经理一天工作%d个小时n",hour)
fmt.Printf("产品经理正在%sn",w.skill)
return "happy"
}
func (w *ProductManager) Rest() {
fmt.Printf("休息看程序员工作?")
}
type Boss struct {
skill string
}
func (w *Boss)Work(hour int) (product string) {
fmt.Printf("老板一天工作%d个小时n",hour)
fmt.Printf("老板正在%sn",w.skill)
return "睡觉"
}
func (w *Boss) Rest() {
fmt.Printf("老板一天到晚都在休息")
}
func main() {
workers := make([]Worker, 0)
workers = append(workers, &Coder{"撸代码"})
workers = append(workers, &ProductManager{"拍脑门"})
workers = append(workers, &Boss{"吹牛逼"})
//r := rand.New(rand.NewSource(time.Now().UnixNano()))
//weekday := r.Intn(7)
weekday := 6
fmt.Printf("今天是星期%dn",weekday)
if weekday>0 && weekday<6{
for _,worker := range workers{
worker.Work(8)
}
}else {
for _,worker := range workers{
if coder,ok := worker.(*Coder);ok{
coder.WorkHome()
}else {
coder.Rest()
}
}
}
}