go 面向对象编程

go 面向对象编程_第1张图片

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

封装:通过方法实现

继承:通过匿名字段实现

多态:通过接口实现

匿名字段



go 面向对象编程_第2张图片
匿名字段与初始化



go 面向对象编程_第3张图片
同名与赋值


go 面向对象编程_第4张图片
匿名字段指针


方法method


function (receiver ReceiverType) funcName ()

带有 接收者的 函数 就是方法, 只要接受者reciver类型不一样,同函数名都属于不同的函数

Go语言中可以给任意 自定义类型 添加相应的方法

接收者类型不能为指针类型


go 面向对象编程_第5张图片
自定义方法


go 面向对象编程_第6张图片
方法指针,值语义和指针语义

// 注意:reciverType接收着类型本身不能是指针类型,否则报错

ep: type pointer *int 如果reciverType是pointer报错

// invalid receiver type pointer (pointer is a pointer type)

type pointer *int

func (p pointer) test() {}

方法集

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

用 实例value 和指针pointer调用方法不受方法集约束,编译器能找到所有的方法,并自动转换receiver实参


go 面向对象编程_第7张图片
不受方法集限制



go 面向对象编程_第8张图片
方法继承和重写



go 面向对象编程_第9张图片
方法值和方法表达式调用

你可能感兴趣的:(go 面向对象编程)