10.3 接口实现

给定类型的值如果实现了该接口,就说这个类型 "实现了接口"。

  • 如果非接口类型 T 是 I 的类型集的元素,则 T 实现了接口 I。

  • 如果接口类型 T 的类型集是 I 的类型集的子集,则 T 实现了接口 I。

例子:

type Drone struct {}
type Airplane struct {}

type Flyer interface {
    Fly()
}

type HighFlyer interface {
    Flyer
    FlyHigh() string
}

func (d Drone) Fly() {}
func (a Airplane) Fly() {}
func (a Airplane) FlyHigh() string {
    return "Yay!"
}

在此示例中,接口 Flyer 的类型集是 Drone 和 Airplane,而 HighFlyer 的类型集是 Airplane。因此,Drone 类型的值实现了 Flyer,Airplane 类型的值实现了 Flyer 和 HighFlyer。

此外,HighFlyer 接口类型的值实现了 Flyer,因为 HighFlyer 的类型集是 Flyer 的子集。

(或者,反过来说,Drone 的方法集是 Fly,而 Airplane 的方法集包括 Fly 和 FlyHigh。因此,Drone 实现了 Flyer,Airplane 实现了 Flyer 和 HighFlyer。)

最后更新于