断言
package main
import "fmt"
// 定义一个通用接口:动物接口
type Animal interface {
Breath() // 动物都具备 呼吸方法
}
type Flyer interface {
Fly()
}
type Swimer interface {
Swim()
}
// 定义一个鸟类:其呼吸的方式是在陆地
type Bird struct {
Name string
Food string
Kind string
}
func (b *Bird) Breath() {
fmt.Println("鸟 在 陆地 呼吸")
}
func (b *Bird) Fly() {
fmt.Printf("%s 在 飞\n", b.Name)
}
// 一定一个鱼类:其呼吸方式是在水下
type Fish struct {
Name string
Kind string
}
func (f *Fish) Breath() {
fmt.Println("鱼 在 水下 呼吸")
}
func (f *Fish) Swim() {
fmt.Printf("%s 在游泳\n", f.Name)
}
// 一个普通函数,参数是动物接口
func Display(a Animal) {
// 直接调用接口中的方法
a.Breath()
// 调用实现类的成员:此时会报错
fmt.Println(a.Name)
}
func main() {
var b = &Bird{
"斑鸠",
"蚂蚱",
"鸟类"
}
Display(b)
}
接口类型无法直接访问其具体实现类的成员(这是肯定的,要是让你访问其具体实现类成员那才有鬼了,因为在编译时,编译器只知道它是该接口类型,所以只让你