其他分享
首页 > 其他分享> > Goland:继承、封装和多态

Goland:继承、封装和多态

作者:互联网

继承:
1.将其他结构体当成构建结构体的一部分。
2.结构体的几种关系:继承(强耦合)、实现(接口和实现类)、依赖(将一个结构体作为另一个结构体的参数)、关联(强依赖和平等)、聚合(整体和部分)、组合(整体和部分,不可分和同周期)
组合>聚合>关联>依赖
3.在go中用匿名属性实现继承
例如:
type People struct {
name string
}
type Teacher struct {
classroom string
People
}

封装:
1.最直接的就是函数名首字母大小写,大写才能被其他包调用,小写只能在所在包调用。
2.对另一个包下的参数调用,在那个包下实现设置、取值的相关方法以供外部调用,不然无法访问结构体里的参数。

多态:
1.多态就是接口的用法表示,接口就是一组操作的声明,然后后面再按方法的实现来完成不同结构体下的实现基于接口的多态。
2.多态在代码层面最常见的就是将接口当做方法参数
在这里的话说明一下我当前对接口类型的理解:
除了基本数据类型,复合类型指针pointer、数组array、切片slice、字典map、channel,
结构体struct和接口interface其实有点像?因为go也说了只要一个结构体实现了接口的全部方法,这个结构体就属于接口类型了,映射到代码上就是这个结构体的变量可以作为一个整体赋给接口变量,然后接口变量调用接口方法时,具体调用哪个方法就看赋值的结构体是哪种类型,实现出来就是那种类型下的接口方法。
注意:因为interface也是一个类型,上面接口类的接口方法要按函数/方法那样写出来
例如:

点击查看代码
package InterfaceTest

import "fmt"

type People struct {
	name string
}

type Animate struct {}

type Live interface {
	run()
}

func (p *People) run() {
	fmt.Println("执行people的run")
}

func (a *Animate) run() {
	fmt.Println("执行Animate的run")
}

func Allrun(live Live)  {
	live.run()
}
点击查看代码
package main

import "myItem/src/InterfaceTest"

func main() {

	//接口测试2
	peo := &InterfaceTest.People{}
	ani := &InterfaceTest.Animate{}
	InterfaceTest.Allrun(peo)
	InterfaceTest.Allrun(ani)

}

标签:run,struct,People,多态,接口,InterfaceTest,Goland,封装
来源: https://www.cnblogs.com/ganhuasen/p/16206654.html