接口
type Usb interface {
Start()
Stop()
}
type Phone struct {
}
func (p Phone) Start() {
fmt.Println("手机开始工作!!")
}
func (p Phone) Stop() {
fmt.Println("手机停止工作!!")
}
type Camera struct {
}
func (p Camera) Start() {
fmt.Println("相机开始工作!!")
}
func (p Camera) Stop() {
fmt.Println("相机停止工作!!")
}
type Computer struct {
}
func (c Computer) Working(usb Usb) {
usb.Start()
usb.Stop()
}
func TestInterface() {
computer := Computer{}
phone := Phone{}
camera := Camera{}
computer.Working(phone)
computer.Working(camera)
var usb Usb
usb = phone
usb.Start()
usb.Stop()
}
细节
- 接口内所有方法都没有方法体,即接口内没有方法的具体实现
- 接口中不允许含有任何变量
- 接口不需要显式实现,只要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口
- 接口本身不能创建实例,但可以指向一个实现了接口实例
- 一个自定义类型只有实现了接口,才能被接口变量指向
- 只要是自定义类型,就可以实现接口
- 一个自定义类型可以实现多个接口
- 一个接口(A)可以继承多个其他匿名接口(B,C),此时要实现A接口,必须将其他皆苦(B,C)也全部实现
- interface默认是一个引用类型(指针),初始化之前其默认值位nil
- 空接口没有任何方法,我们可以认为任何变量都实现了空接口,任何变量都可以被赋值给空接口