美文网首页
Go 语言程序设计——面向对象编程(2)

Go 语言程序设计——面向对象编程(2)

作者: hlemon | 来源:发表于2019-07-28 21:31 被阅读0次

添加方法

  • 方法是作用在自定义类型的值上的一类特殊函数,通常自定义类型的值会被传递给该函数
  • 方法可以以指针或者值的形式传递,这取决于方法如何定义
  • 定义方法的语法几乎等同于定义函数
  • 可以为任何自定义类型添加一个或者多个方法
  • 一个方法的接收者总是一个该类型的值,或者只是该类型的指针
  • 对于任何一个给定的类型,每个方法名必须唯一
  • Go 语言推荐的方式是使用名字唯一的函数
  • 例子:
type Count int

func (count *Count) Increment() { *count++ }
func (count *Count) Decrement() { *count-- }
func (count Count) IsZero() bool { return count == 0 }

var count Count
i := int(count)
count.Increment()
j := int(count)
count.Decrement()
k := int(count)
fmt.Println(count, i, j, k, count.IsZero())
  • 类型的方法集是指可以被该类型的值调用的所有方法的集合
  • 数据类型的值很大,或者需要修改该值,则需要让方法接受一个指针类型的接收者

重写方法

  • 任何嵌入类型中的方法都可以当做该自定义结构体自身的方法被调用,并且可以将其内置类型作为其接收者
  • 例子:
type Item struct {
  id string // 具名字段(聚合)
  price float64 // 具名字段(聚合)
  quantity int // 具名字段(聚合)
}

func (item *Item) Cost() float64 {
  return item.price * float64(item.quantity)
}

type SpecialItem struct {
  Item  // 匿名字段(嵌入)
  catalogId int // 具名字段(聚合)
}

// SpecialItem嵌入了一个Item类型。这意味着我们可以在一个SpecialItem上调用Item的Cost()方法

special := SpecialItem{Item{"Green", 3, 5}, 207}
fmt.Println(special.id, special.price, special.quantity, special.catalogId)
fmt.Println(special.Cost())
  • 当调用 special.Cost() 的时候,由于 SpecialItem 类型没有它自身的 Cost() 方法, Go 语言会使用 Item.Cost() 方法
  • 也可以在自定义的结构体中创建与所嵌入的字段中的方法同名的方法,来覆盖被嵌入字段中的方法:
type LuxuryItem struct {
  Item                  // 匿名字段(嵌入)
  markup float64 // 具名字段(聚合)
}

func (item *LuxuryItem) Cost() float64 { // 没必要这么冗长
  return item.Item.price * float64(item.Item.quantity) * item.markup
}

func (item * LuxuryItem) Cost() float64 { // 没必要的重复!
  return item.price * float64(item.quantity) * item.markup
}

func (item * LuxuryItem) Cost() float64 { // 完美
  return item.Item.Cost() * item.markup
}

相关文章

  • struct

    面向对象编程 Go支持面向对象编程特性,但和传统面向对象编程是有区别的,Go并不是纯粹的面向对象语言。 Go没有类...

  • Go基础语法(十二)

    面向对象编程 Go 并不是完全面向对象的编程语言。 Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘录如...

  • 基于对象还是面向对象(二)?

    面向对象程序设计理念 面向对象程序设计并非是面向对象编程语言出现才有的概念,实际上早在这之前人们就在各种编程语言中...

  • 第十六章:Go语言面向对象编程

    1. GO语言OOP概述 Go语言不是纯粹的面向对象的语言,准确是描述是,Go语言支持面向对象编程的特性.Go语言...

  • 2020-03-12

    一. 程序设计语言 二. c++语言的出现背景 三. 面向对象编程 四. 面向对象编程思想 五...

  • go day06 面向对象 匿名组合 方法、方法集、方法

    面向对象 对于面向对象编程的支持Go语言设计的非常简洁而优雅。因为,Go语言并没有沿袭传统的面向对象编程中的诸多概...

  • 类和对象

    1、面向对象程序设计的基本概念 过程是编程语言:程序=算法+数据面向对象编程语言:程序=对象+消息 对象 对象的特...

  • 《软件工程》笔记7

    面向对象的实现 面向对象的程序设计最好还是选用面向对象的编程语言。 良好的程序设计风格对于面向对象实现来说格外重要...

  • 带你手撸万元java进阶课程:jvm基础知识、字节码、类加载器

    编程语言 演化: 机器语言->编程语言->高级语言(java,c++,Go,Rust等) 面向过程--面向对象-面...

  • go语言20小时从入门到精通(八、 面向对象编程)

    8.1 概述 对于面向对象编程的支持Go 语言设计得非常简洁而优雅。因为, Go语言并没有沿袭传统面向对象编程中的...

网友评论

      本文标题:Go 语言程序设计——面向对象编程(2)

      本文链接:https://www.haomeiwen.com/subject/exyflctx.html