go面向对象学习笔记

go面向对象学习笔记

继承

在cat结构体中定义一个匿名字段animal,那么cat就继承了animal结构体,并且可以起到提升字段的效果,不需要cat.animal.name 可以直接用cai.name如下:

package main

import "fmt"

func main() {
	cat1 := cat{anmial{"男", 18}, "花花"}
	fmt.Println(cat1.anmial.sex)
	fmt.Println(cat1.sex)

}

type anmial struct {
	sex string
	age int
}
type cat struct {
	anmial //设为匿名字段,可以触发提升字段
	name   string
}

方法

方法就是函数名字前加个指定的type,并且只允许被这个type调用,可以重名。
如果是子类调用父类的方法,可以重写方法。
go面向对象学习笔记_第1张图片

接口

接口就是一堆方法的集合,方法不在接口中实现,被结构体实现调用。
实现 :需要结构体实现全部的接口方法,缺一不可。
隐式实现,就是不需要写implement。
go面向对象学习笔记_第2张图片
结构体实现接口后,在创建方法时,如果入参为接口,可以使用结构体当入参,来进行具体的实现。
如下图usb为接口,mouse为结构体,mouse实现了usb接口
go面向对象学习笔记_第3张图片

变量如果是接口类型,可以将实现他的结构体赋值给变量,也叫多态
go面向对象学习笔记_第4张图片

空接口

接口中没有任何方法的接口
可以被任意类型赋值、实现,
fmt.Println中的入参底层就是空接口。
map,切片的类型都可以是空接口,数组不可以。

接口嵌套

类似继承,创建接口a,在接口b中放入匿名字段a,就继承了a。

断言

判断接口是否是某某类型的过程叫做断言,并且支持ok-idiom机制。
一般用assert前缀表示用来断言的函数
go面向对象学习笔记_第5张图片
i.(type)此方法只适用于switch情况下,
go面向对象学习笔记_第6张图片

别名

可以将自己不喜欢的类型改个名字,type myint int 相当于copy了一个新类型。

type myint1 = int使用,相当于引用原有int,指向相同的地址。单纯改名。
go面向对象学习笔记_第7张图片

个人理解,欢迎批评指正。

你可能感兴趣的:(golang,学习,开发语言)