Go的面向对象编程特性


封装


继承
go中使用匿名结构体来实现继承!
- 结构体可以使用嵌套结构体内所有字段和方法
匿名结构体字段访问可以简化

如果结构体与匿名结构体含有相同的字段或方法,编译器采用就近原则

- 结构体嵌入多个匿名结构体时,如果两个嵌入的匿名结构体含有相同字段或方法(同时鸡骨头提本身没有同名字段方法),在访问时,必须值命匿名结构体名字,否则编译报错。

- 如果一个结构体嵌套了一个有名结构体,那么这种模式就是组合,租还关系在访问时必须带上结构体名字

- 嵌套匿名结构体后,也可以在创建结构体变量时,直接指定各个匿名结构体字段的值。


- 如果一个结构体有一个基本类型的匿名结构体,那么就只能拥有这种类型的字段一个
package BasicLearnimport "fmt"type Student struct { //公共父类 StudentName stringAge intScore int}func(stu *Student)ShowInfo(){fmt.Printf("学生名=%v 年龄=%v 成绩=%v\n",stu.Name,stu.Age,stu.Score)}func(stu *Student)SetScore(score int){stu.Score = score}//子类小学生type Pupil struct{Student //嵌入Student匿名结构体,相当于继承}func(p *Pupil)testing(){fmt.Println("小学生正在考试呢!!!")}//子类大学生type Graduate struct {Student}func(g *Graduate)testing(){fmt.Println("大学生正在考试呢!!!")}func TestExtend() {pupil := &Pupil{}pupil.Student.Score = 80pupil.Student.Name = "大头"pupil.Student.Score = 100fmt.Println(*pupil)//1. 结构体可以使用嵌套结构体内所有字段和方法//2. 匿名结构体字段访问可以简化pupil.Score = 88pupil.Name = "大5头"pupil.Score = 90fmt.Println(*pupil)}
多重继承



多态
多态主要通过接口来体现
- 多态参数
可以定义方法接受接口类型,不同实现的结构体会调用自己的对应方法。
- 多态数组
可以定义一个接口数组,数组内可以存储实现了接口的不同结构体。
