文章目录
- Go学习-Day6
- 封装
- 继承
- 接口
Go学习-Day6
- 个人博客:CSDN博客
封装
- 类似java的类的封装,这里我们利用大小写和工厂模式来实现封装的功能
- 略过
继承
-
相似的类具有相似的方法,反复绑定相同的方法,代码冗余,所以引入了继承的概念
-
嵌套匿名结构体来实现继承的效果
-
动手实践!
-
type Node struct { Name string `json:"name"` Password string `json:"password"` } type Point struct { Node X int Y int } func (a *Node) ok() { a.Name = "bbbb" } func main() { var a Point = Point{ Node{"aaa", "bbb"}, 1, 2, } a.ok() fmt.Println(a) }
-
注意看,a.ok()其实是a.Node.ok()底层自动识别,可以省略匿名结构体
-
基本数据类型可以匿名,但是不能出现多个相同类型的匿名基本类型
接口
-
多态主要就是由接口来实现的
-
声明
-
type inter interface { a() b() }
-
实现接口
-
import "fmt" type inter interface { a() b() } type obj1 struct { } type union struct { } func (o obj1) a() { fmt.Println("okkk") //用node对象给接口的a()实现 } func (o obj1) b() { fmt.Println("ohhh") } func (u union) ok(in inter) { in.a() in.b() } func main() { x := union{} y := obj1{} x.ok(y) }
-
从上面我们可以看到,在声明一个接口之后,我们用工厂方法法obj对应接口的所有方法给实现了,然后另外整一个抽象类似的的结构体,绑定一个方法运行接口,这样我们就能通过接口把这两个类给链接在一起。
-
总结。
-
interface类型可以定义一组方法,方法不用实现,并且不能含有变量
-
Go语言没有implements关键字,只要一个变量类型,绑定了接口中所有的方法,这个变量就能实现这个接口
-
这个变量就能导入到含有接口作为变量的函数内