OOP
-
Go不是纯面向对象的语言
-
Go没有面向对象的三大特征(封装,继承,多态)
-
Go通过结构体嵌套模拟继承
-
模拟继承性:is-a
type A struct{ field } type B struct{ A //匿名字段 提升字段 }
-
模拟聚合关系:has-a
type C struct{ field } type D struct{ c C//聚合关系 }
-
提升字段
在结构体中属于匿名结构体的字段称为提升字段,因为他们可以被访问,就好像它们属于拥有匿名结构字段的结构体一样。
type Book struct {
bookName string
price float64
}
type Worker struct {
name string
age int
Book
}
worker := Worker{
name:"kaka",
age:20,
Book:Book{"工作手册",20.2},
}
fmt.Println(worker.bookName) //不同通过Book对象,就可以直接访问到Book属性