go语言(四):面向对象

2020-07-14  本文已影响0人  宋song一

面向对象OOP,注重重用
面向过程OPP

一。传统面向对象类与类的关系:(go为struct)

接口命名习惯以er结尾

一、go语言面向对象

封装:方法(带有接收者的函数,自带参数)(首字母大小写控制访问权限。属性首字母小写,对外提供访问方法)
继承:通过组合(匿名字段/属性,结构体)实现。代码复用。
type Teacher struct{
People //匿名属性实现继承
class string
}
多态:基于接口的多态,接口作为方法的参数。结构体赋给接口

go语言中,可以给除了指针类型以外的自定义类型(包括内置类型)添加相应的方法
方法的receiver类型可以是T(不能是接口或指针)或*T
不支持重载方法(名字相同,参数不同)
receiver类型不同就是不同的方法

方法的receiver为普通类型时,为值传递。 指针类型时,为引用传递
Person结构体的方法:
func (tmp Person) Print(){
...
结构体本身为值类型
结构体指针:new(Person) 或&Person{}。结构体指针取值
Person
}

1. 方法的重写

方法名相同,接收者不同
默认时按就近原则调用。也可以指定调用

2. 方法表达式

f=(Person).SetInfo
f(p) //普通变量作为接收者(p Person)
通过结构体变量调用。
接收者传指针类型,可以修改接收者变量的值

3. (接口)超集(变量)可以转换(/赋值)为子集,反之不可以。

属于关系

type Live interface{
run()
}
func a(*People) run(){
fmt.Println("人在跑步")
}
func allRun(live Live){
live.run()
}
func main(){
peo:=&People{}
allRun(peo)
}

4. 类型断言 for...range

  1. if value,ok := data.(int);ok==true{
    ...
    }
  2. switch v :=data.(type){
    ...
    }
上一篇 下一篇

猜你喜欢

热点阅读