美文网首页
go语言面向对象-继承(匿名组合)

go语言面向对象-继承(匿名组合)

作者: 夜空中乄最亮的星 | 来源:发表于2018-02-12 13:33 被阅读0次

匿名组合

确切地说,Go语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合:

type Base struct {
  Name string
}
func (base *Base) Foo() { ... }
func (base *Base) Bar() { ... }

type Foo struct {
      Base
      ...
}
func (foo *Foo) Bar() {
    foo.Base.Bar()
    ...
}

以上代码定义了一个 Base 类(实现了 Foo() 和 Bar() 两个成员方法) ,然后定义了一个Foo 类,该类从 Base 类“继承”并改写了 Bar() 方法(该方法实现时先调用了基类的 Bar()方法) 。
在“派生类” Foo 没有改写“基类” Base 的成员方法时,相应的方法就被“继承” ,例如在上面的例子中,调用 foo.Foo() 和调用 foo.Base.Foo() 效果一致。

与其他语言不同,Go语言很清晰地告诉你类的内存布局是怎样的。此外,在Go语言中你还
可以随心所欲地修改内存布局,如:

type Foo struct {
... // 其他成员
Base
}

这段代码从语义上来说,和上面给的例子并无不同,但内存布局发生了改变。 “基类” Base
的数据放在了“派生类” Foo 的最后。另外,在Go语言中,你还可以以指针方式从一个类型“派生” :

type Foo struct {
*Base
...
}

这段Go代码仍然有“派生”的效果,只是 Foo 创建实例的时候,需要外部提供一个 Base 类实例的指针。

相关文章

  • Golang-TCP异步框架Tao分析

    TCP异步框架 Golang 编程风格 Go语言面向对象编程的风格是多用组合,少用继承,以匿名嵌入的方式实现继承。...

  • go语言面向对象-继承(匿名组合)

    匿名组合 确切地说,Go语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合: 以上代码定义了一个 B...

  • go面向对象的理解

    在go语言中没有面向对象的概念,但是可以通过下面方式实现面向对象的特征 封装, 通过方法实现 继承, 通过匿名字段...

  • Golang learning 结构体 struct 与面向对

    Go 语言并不是传统意义上的面向对象语言,但是实现很小的面向对象的机制。匿名嵌入并不是继承,无法实现多态处理,虽然...

  • Go基础编程---面向对象

    面向对象 Go中没有发封装、继承、多态,但是可以通过方法、匿名字段、接口实现,Go中偏向于面向接口编程 匿名字段(...

  • 【Golang 基础】Go 语言 面向对象

    Go 语言的面向对象   Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。...

  • Go语言入门第三节 Go 语言面向对象机制

    Go语言面向对象编程 Go语言的面相对象和主流语言有很大的不同,如Go 语言里是不支持继承,Go语言的接口实现也不...

  • Golang——结构体struct

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

  • study_go_day7_结构体和方法

    package main import "fmt" /*面向对象 * go语言仅支持封装,不支持继承和多态,继承和...

  • 11.结构体

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

网友评论

      本文标题:go语言面向对象-继承(匿名组合)

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