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

2019-11-08  本文已影响0人  落雨_a363

面向对象

对于面向对象编程的支持Go语言设计的非常简洁而优雅。因为,Go语言并没有沿袭传统的面向对象编程中的诸多概念,比如继承(不支持继承,尽管匿名字段的内存布局和行为类似继承,但它并不是继承)、虚函数、

构造函数和析狗函数、隐藏的this指针等。

尽管Go语言中并没有封装、继承、多态这些概念,但同样通过别的方式实现这些特性:

封装:通过方法实现

继承:通过匿名字段实现

多态:通过接口实现

1.匿名组合:

     匿名字段作用

1

成员操作

1

同名字段

1

非结构体匿名字段

1

结构体指针类型匿名字段

1

2.方法

在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法。

方法总是绑定对象实例,并隐式将实例作为第一实参,方法的语法如下:

func (receiver RecriverType) funcName(parameters) (results)

* 参数receicer可任意命名。如方法中未使用,可省略参数名。

* 参数receicer类型可以是T或*T。类型T不能是接口或指针。

* 不支持重载方法,也就是说,不能定义名字相同,但是不同参数的方法。

1

结构体类型添加方法

1

方法集

类型的方法集是指可以被该类型的值调用的所有方法的集合

用实例value和pointer调用方法(含匿名字段)不受方法集的约束,编辑器总是查找全部方法,并自动转换receiver实参

类型*T方法集

一个指向自定义类型的值的指针,它的方法集由该类型定义的所有方法组成,无论这些方法接受的是一个值还是一个指针。

如果在指针调用一个接受值的方法,Go语言会聪明地将该指针解引用,并将指针所指的底层值作为方法的接收者。

1

方法的继承

1

方法的重写

1

方法值

1

方法表达式

1
上一篇 下一篇

猜你喜欢

热点阅读