美文网首页
Go语言中没有类继承,要用多态怎么办?

Go语言中没有类继承,要用多态怎么办?

作者: 丁哥开讲 | 来源:发表于2019-08-03 08:59 被阅读0次

Go语言中没有类继承,要用多态怎么办?

这一期我们继续来了解一下go语言。这些专门了解接口。大家知道,go语言里面是不存在类继承的。那这是不是意味着,go语言里就无法实现多态呢?

结构,大家一定很熟悉了。我们先看一个结构的例子。

现在我们定义一个结构, shape. 比如这样:

 type shape struct{

 }

因为结构内部不能包含方法,所以我们额外定义一个方法。

func (s shape)hasArea(type string) bool {

      if type == "line"

      return false

      else 

      return true

}

因为shape是抽象的概念, 没有具体指向的时候,是无法使用的。

所以我们还要定义另外一个具体的shape, 比如说正正方形。

那我们就需要这样。

type square struct{

shape

length int

}

在上面的这个定义中我们嵌入了上面定义的shape结构。

在实用中我们可以这样用: 

sq := square{shape{}, 123}

fmt.Pringln("Has area?", sq.hasArea())

上面这个例子是典型的面向对象的编程, 使用的是强类型。强类型情况下是无法实现多态的。那么在go语言中,我们有没有办法实现多态呢?

我们以前说的go语言是不支持类继承的, 其实go语言也是可以实现多态的, 接口正是Go语言里面实现多态的方法。

我们来看一下如何使用接口来实现多态, 同样还是上面的例子, 如果使用接口的话就可以这么写:

type shape interface{

hasArea(name string)bool

}

type square struct {

length int

}

func (sq square)hasArea(type string) bool {

      if type == "line"

      return false

      else 

      return true

}

使用的时候可以这样:

sq := square{123}

fmt.Pringln("Has area?", sq.hasArea())

或者这样

var sq shape

sq = square{123}

fmt.Pringln("Has area?", sq.hasArea())

从上面的例子可以看出,任何能够匹配以上接口中函数定义的结构对象, 都可以使用这个接口类型。

这样做,就在go语言实现多态了。

怎么样? 有没有感觉这个多态实现起来太容易了? 这就是go语言里面接口的使用和多态的实现。

相关文章

  • Go语言中没有类继承,要用多态怎么办?

    ​ Go语言中没有类继承,要用多态怎么办? 这一期我们继续来了解一下go语言。这些专门了解接口。大家知道,go语言...

  • Go语言之匿名组合

    一. 概述 Go语言中没有封装,继承,多态的概念,但是可以通过别的方式来实现这些特征 封装:使用方法实现 继承:使...

  • Golang——结构体struct

    Go语言中没有“类”的改变,不支持类的“继承”等面向对象概念。Go语言中通过结构体的内嵌再配合接口比面向对象更具有...

  • 11.结构体

    Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具...

  • Go语言基础之结构体

    Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具...

  • golang-面向对象

    思考:go语言不支持继承与多态的优点与缺点是什么 go语言只支持封装,不支持继承与多态 go语言没有class,只...

  • golang-结构体

    结构体就是当做实体类来用但是Go里面没有继承和多态,但是可以用扩展和组合方式

  • Python 语言中的 “鸭子类型”

    提到 “鸭子类型”,就要先讲讲面向对象编程语言中的继承和多态。 继承 首先创建一个 Animal() 父类,父类继...

  • 13. 关于多态性

    关于多态性 答案:多态,子类指针可以赋值给父类。 这个题目其实可以出到一切面向对象语言中, 因此关于多态,继承和封...

  • Go结构体、方法、接口

    1 结构体 Go语言中没有“类”的概念,也不支持像继承这种面向对象的概念。但是Go语言的结构体与“类”都是复合结构...

网友评论

      本文标题:Go语言中没有类继承,要用多态怎么办?

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