面向对象
对于面向对象编程的支持Go语言设计的非常简洁而优雅。因为,Go语言并没有沿袭传统的面向对象编程中的诸多概念,比如继承(不支持继承,尽管匿名字段的内存布局和行为类似继承,但它并不是继承)、虚函数、
构造函数和析狗函数、隐藏的this指针等。
尽管Go语言中并没有封装、继承、多态这些概念,但同样通过别的方式实现这些特性:
封装:通过方法实现
继承:通过匿名字段实现
多态:通过接口实现
1.匿名组合:
匿名字段作用

成员操作

同名字段

非结构体匿名字段

结构体指针类型匿名字段

2.方法
在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法。
方法总是绑定对象实例,并隐式将实例作为第一实参,方法的语法如下:
func (receiver RecriverType) funcName(parameters) (results)
* 参数receicer可任意命名。如方法中未使用,可省略参数名。
* 参数receicer类型可以是T或*T。类型T不能是接口或指针。
* 不支持重载方法,也就是说,不能定义名字相同,但是不同参数的方法。


结构体类型添加方法

方法集
类型的方法集是指可以被该类型的值调用的所有方法的集合
用实例value和pointer调用方法(含匿名字段)不受方法集的约束,编辑器总是查找全部方法,并自动转换receiver实参
类型*T方法集
一个指向自定义类型的值的指针,它的方法集由该类型定义的所有方法组成,无论这些方法接受的是一个值还是一个指针。
如果在指针调用一个接受值的方法,Go语言会聪明地将该指针解引用,并将指针所指的底层值作为方法的接收者。

方法的继承

方法的重写

方法值

方法表达式

网友评论