接口

image.png
image.png

  1. type Usb interface {
  2. Start()
  3. Stop()
  4. }
  5. type Phone struct {
  6. }
  7. func (p Phone) Start() {
  8. fmt.Println("手机开始工作!!")
  9. }
  10. func (p Phone) Stop() {
  11. fmt.Println("手机停止工作!!")
  12. }
  13. type Camera struct {
  14. }
  15. func (p Camera) Start() {
  16. fmt.Println("相机开始工作!!")
  17. }
  18. func (p Camera) Stop() {
  19. fmt.Println("相机停止工作!!")
  20. }
  21. type Computer struct {
  22. }
  23. func (c Computer) Working(usb Usb) {
  24. usb.Start()
  25. usb.Stop()
  26. }
  27. func TestInterface() {
  28. computer := Computer{}
  29. phone := Phone{}
  30. camera := Camera{}
  31. computer.Working(phone)
  32. computer.Working(camera)
  33. var usb Usb
  34. usb = phone
  35. usb.Start()
  36. usb.Stop()
  37. }

细节

  1. 接口内所有方法都没有方法体,即接口内没有方法的具体实现
  2. 接口中不允许含有任何变量
  3. 接口不需要显式实现,只要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口
  4. 接口本身不能创建实例,但可以指向一个实现了接口实例

image.png

  1. 一个自定义类型只有实现了接口,才能被接口变量指向
  2. 只要是自定义类型,就可以实现接口

image.png

  1. 一个自定义类型可以实现多个接口

image.png

  1. 一个接口(A)可以继承多个其他匿名接口(B,C),此时要实现A接口,必须将其他皆苦(B,C)也全部实现

image.png

  1. interface默认是一个引用类型(指针),初始化之前其默认值位nil
  2. 空接口没有任何方法,我们可以认为任何变量都实现了空接口,任何变量都可以被赋值给空接口