【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切片,并且调用各子类的方法


注意点

  • 在创建切片时的名字需要跟接口名一致
  • 扩容切片时需要添加指针 而非值
  • 创建随机数需要种子选手
相关文章
|
1天前
|
Java Go C++
Go面向对象是如何实现的?
【2月更文挑战第23天】
33 0
|
1天前
|
存储 Go 开发者
【Go语言专栏】深入探索Go语言的接口与多态
【4月更文挑战第30天】本文探讨了Go语言中的接口和多态性。接口是方法集合的抽象类型,允许不同类型的值实现相同的方法,实现多态。接口定义不包含实现,仅包含方法签名。类型实现接口是隐式的,只要实现了接口所需的方法。接口用于编写与具体类型无关的通用代码。通过接口,不同类型的对象可以响应相同消息,展现多态性。此外,接口可以嵌入以继承其他接口,类型断言则用于访问接口内部的具体类型。空接口可存储任何类型值。理解并掌握接口有助于编写更灵活、模块化的Go代码。
|
7月前
|
Cloud Native Java 编译器
100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析
75 0
Go面向对象设计
Go面向对象设计
|
Java Go
Go语言实现多态
Go语言实现多态
189 0
Go语言实现多态
Go-面向对象编程详解(封装、继承、多态等)
Go-面向对象编程详解(封装、继承、多态等)
139 0
Go-面向对象编程详解(封装、继承、多态等)
|
网络协议 Java 测试技术
Go 独树一帜的面向对象特点 | 学习笔记
快速学习 Go 独树一帜的面向对象特点
77 0
Go 语言入门很简单:Go 如何面向对象
我们一直学习的是 Go 不支持面向对象,取而代之的是组合的方式。Go 利用接口可以实现类似面对对象的功能,比如多态。虽然 Go 语言并非面向对象的语言,但它还是包含了一些特征可模拟面向对象的编程语言。
|
设计模式 存储 算法
Go设计模式(2)-面向对象分析与设计
本篇文章主要讲解遇到项目之后如何做面向对象分析与设计。

热门文章

最新文章

http://www.vxiaotou.com