【GO】面向对象:多态

简介: 【GO】面向对象:多态

咔咔博客之多态

  • 多态是指,一个父类接口可以拥有多种子类实现形态
  • 这些子类形态之间有相同点,那就是它们都实现了父类接口中的方法
  • 不同点则是大家对父类接口方法的实现方式各不相同,演绎何为千姿百态

代码地址

https://github.com/fangkang7/goLearn

案例

定义父类接口Worker

image.png

// 定义工人接口
type Worker interface {
  // 每天工作多少小时,产出何种产品
  Work(hour int) (chanpin string)
  // 休息
  Rest()
}

屏幕快照 2022-05-18 下午7.53.38.png

// 定义码农
type Coder struct {
  skill string
}
func (Coder *Coder) Work(hour int) (chanpin string) {
  fmt.Printf("码农一天工作%d小时\n", hour)
  return "BUG"
}
func (Coder *Coder) Rest() {
  fmt.Println("休息是什么???")
}

屏幕快照 2022-05-18 下午7.53.53.png

// 定义产品经理
type ProductManager struct {
  skill string
}
func (P *ProductManager) Work(hour int) (chanpin string) {
  fmt.Printf("产品一天工作%d小时\n", hour)
  return "无逻辑的需求"
}
func (P *ProductManager) Rest() {
  fmt.Println("产品可以使劲的休息")
}

屏幕快照 2022-05-18 下午7.54.12.png

// 定义boos
type Boos struct {
  skill string
}
func (Boos *Boos) Work(hour int) (chanpin string) {
  fmt.Printf("boos一天工作%d小时\n", hour)
  return "梦想"
}
func (Boos *Boos) Rest() {
  fmt.Println("无休息")
}

屏幕快照 2022-05-18 下午7.54.28.png

func main() {
  // 创建一个工人切片保存三种职业
  // 这里需要注意一个点  这个切片的名字Worker需要跟接口名一致
  workers := make([]Worker, 0)
  // 往切片添加的都是指针并非值,因为在方法主语用的是指针形式 (Boos *Boos)
  workers = append(workers, &Coder{skill: "写代码"})
  workers = append(workers, &ProductManager{skill: "提需求"})
  workers = append(workers, &Boos{skill: "想方案"})
  // 创建一个种子
  r := rand.New(rand.NewSource(time.Now().UnixNano()))
  // 创建一个随机数代表星期几
  weekday := r.Intn(7)
  if weekday > 0 && weekday < 6 {
    for _, Worker := range workers {
      Worker.Work(8)
    }
  } else {
    for _, Worker := range workers {
      Worker.Rest()
    }
  }
}

案例详解


  • 在这个案例中,我们定义了一个Worker的接口,并且定义了俩个抽象方法
  • 然后定义了三个子类来实现Worker接口
  • 实现接口 就是把接口的方法都实现即可
  • 然后在main函数里边创建一个Worker的切片 这里需要注意的是在使用make创建切片时需要一个默认size
  • 在扩容切片时需要传入指针。因为在方法主语是使用的指针 并非值
  • 然后使用for循环来遍历Worker切片,并且调用各子类的方法


注意点

  • 在创建切片时的名字需要跟接口名一致
  • 扩容切片时需要添加指针 而非值
  • 创建随机数需要种子选手
目录
打赏
0
0
0
0
14
分享
相关文章
|
10月前
|
Go面向对象是如何实现的?
【2月更文挑战第23天】
97 0
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
Go从入门到放弃之结构体(面向对象)
Go从入门到放弃之结构体(面向对象)
|
9月前
|
Go
go接口定义、实现、多态
go接口定义、实现、多态
go语言进阶篇——面向对象(一)
go语言进阶篇——面向对象(一)
go语言进阶篇——面向对象(一)
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
Go语言之GORM框架(四)——预加载,关联标签与多态关联,自定义数据类型与事务(完结篇)
102 0
【Go语言专栏】深入探索Go语言的接口与多态
【4月更文挑战第30天】本文探讨了Go语言中的接口和多态性。接口是方法集合的抽象类型,允许不同类型的值实现相同的方法,实现多态。接口定义不包含实现,仅包含方法签名。类型实现接口是隐式的,只要实现了接口所需的方法。接口用于编写与具体类型无关的通用代码。通过接口,不同类型的对象可以响应相同消息,展现多态性。此外,接口可以嵌入以继承其他接口,类型断言则用于访问接口内部的具体类型。空接口可存储任何类型值。理解并掌握接口有助于编写更灵活、模块化的Go代码。
57 2
100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
150 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等