第四天
2019-03-25 本文已影响0人
可问春风渡江陵
一、面向对象编程
1、特性
- 没有封装、继承、多态
- 封装通过方法实现
- 继承通过匿名字段实现
- 多态通过接口实现
2、继承(匿名组合)
type Person struct{
name string
sex byte
age int
}
type Student struct{
Person
id int
addr string
}
var s1 = Student{Person{"ccc",'m',20},13,"hz"}
s2 := Student{Person{name:"ccc"},12,"hz"}
s3 := Student{Person:Person{sex:'m'}}
s1.name = "mike"
s1.Person = Person{"mike",'m',20}
-
同名字段
s1.Person.name = "wang" -
非结构体匿名变量
type Student struct{
Person
int
string
}
s1 := Student{Person{name:"ccc"},666,"hz"}
s1.int //访问
- 结构体指针类型成员变量赋值
type Student struct{
*Person
int
string
}
1.
s1 := Student{&Person{"ccc",'m',20},1,"hz"}
s1.name
2.
var s2 Student
s2.Person = new(Person)
s2.name = "ccc"
3、方法
func fun1(a int)(){
}
func (a int){
}
//带有接收者的函数
func (c int) fun2(a int) long {
return c + b
}
a := 3
result := a.func2(4)
1、面向对象。方法:给某个类型绑定一个函数
- 接受者:就是传递的另一个参数
2、值语义和引用语义
3、方法集,
- T能调用方法的集合(T可以调用T的方法,内部会做转换 ;T也可以调用T的方法,内部也会自动转换)
4、方法的继承
- 结构体继承的时候,成员变量和函数会一起被继承
5、方法的重写(方法的同名方法)
- 继承可以进行方法重写
- 可以指定调用
6、方法值与方法表达式(函数指针的使用)
- 方法值:保存方法的入口地址
- 方法表达式
4、接口
//定义接口类型
type Humaner interface{
//方法,只有声明,没有实现,由别的类型(自定义类型)实现
sayHi()
}
只要实现了接口的方法,就可以向这个接口类型进行赋值,并调用达到多态的效果
4.1 继承
type Personer interface{
//方法,只有声明,没有实现,由别的类型(自定义类型)实现
sing(lrc String)
}
4.2 接口转换
- 超集可以转换为子集,子集不能转换为超集
4.3 空接口(万能类型)
- 不包含方法,可以保存任何类型的值
- 使用场景:打印函数
- interface {}
4.3 类型断言(类型查询)
4.3.1 if
if value ,ok := data.(int);ok == true
4.3.2 switch
switch value := data.(type)