美文网首页
Go语言 重写方法

Go语言 重写方法

作者: 小杰的快乐时光 | 来源:发表于2018-08-18 22:38 被阅读0次

类似于Java中的继承,子类继承并重写父类的方法,Go语言也提供了这样的实现。
Go语言中可以创建一个或者多个类型作为嵌入字段的自定义结构体,任何嵌入类型中的方法都可以当作该自定义结构体自身的方法被调用,从而间接实现子类继承父类的方式

在Go语言中,如果“子类”重写了“父类”的成员方法,需要在子类的成员方法中调用基类的同名成员方法,一定要以

子类名.父类名.重写方法名

这样显式的方法调用,而不是使用

子类名.重写方法名

这种调用继承方法的方式调用,这样会出现无限循环,即一直在调用子类的方法。

我们来看一个代码示例

//创建一个Birds类
type Birds struct {
   Name string  //具名字段(聚合)
}
//Birds类有三个方法
func (bird *Birds)HasFoot()  {
   fmt.Println(bird.Name," has feet!")
}

func (bird *Birds)HasEye()  {
   fmt.Println(bird.Name," has eye!")
}

func (bird *Birds)HasFlying()  {
   fmt.Println(bird.Name," can flying!")
}
//创建一个Ostrich类,并继承 Birds
type Ostrich struct {
   Birds //匿名字段(嵌入)
   Wings string  //具名字段(聚合)
}
//重写Base的Flying方法
func (ostrich *Ostrich)HasFlying()  {
   ostrich.Birds.HasFoot()   //显示调用父类Birds的方法
   ostrich.Birds.HasEye()     //显示调用父类Birds的方法
   ostrich.HasFoot()            //隐式调用父类Birds的方法
   ostrich.HasEye()              //隐式调用父类Birds的方法
   fmt.Println(ostrich.Name," can`t fly")
}

func main() {
   ostrich := new(Ostrich)
   ostrich.Name = "鸵鸟"
   ostrich.HasFlying() //调用子类的方法
}

下面会无限调用自己,形成死循环

func (ostrich *Ostrich)HasFlying()  {
    ostrich.HasFlying()  // 无限调用自己
    fmt.Println(ostrich.Name," can`t fly") // 永远不会执行到这里
}

相关文章

  • Go语言 重写方法

    类似于Java中的继承,子类继承并重写父类的方法,Go语言也提供了这样的实现。Go语言中可以创建一个或者多个类型作...

  • Go语言中重写String()方法

    Go语言中的String方法 在go中如果重写了String 方法,那在调用fmt.Println时就会自动去执行...

  • 第04天(面对对象编程)_03

    11_方法的继承.go 12_方法的重写.go 13_方法值.go 14_方法表达式.go 15_接口的定义和实现.go

  • go语言中的方法

    go支持OO语言的一些特性,方法就是其中之一。本文将介绍go语言中方法相关的概念。 方法声明 在go语言中,我们可...

  • go语言array, slice, map(四)

    array go语言数组,定义方法如下: var arr [n]type 声明方法 go语言也支持多维数组 sli...

  • 53 HashMap8 源码解读

    1,为什么重写equals还要重写hashcode方法hashcode方法:底层采用c语言编写的,根据对象内存地址...

  • Golang中Bit数组如何实现(代码示例)

    Go语言[https://www.php.cn/be/go/]实现Bit数组常用方法 Go语言里的集合一般会用ma...

  • Golang中Bit数组的实现

    Go语言[https://www.php.cn/be/go/]实现Bit数组常用方法 Go语言里的集合一般会用ma...

  • JVM方法调用

    方法重载和方法重写多态是面向对象程序设计的重要特性,方法重载和方法重写是Java语言实现多态的主要形式。方法重载指...

  • Go语言--方法

    1、Go 中有一个概念: 1)Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因...

网友评论

      本文标题:Go语言 重写方法

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