package main
import "fmt"
type Usb interface {
Start()
Stop()
}
//手机
type Phone struct {
Name string
}
//相机
type Camera struct {
Name string
}
//计算机
type Computer struct {
}
//手机实现USB接口方法
func (p Phone) Start() {
fmt.Println("手机开始工作...")
}
func (p Phone) Stop() {
fmt.Println("手机停止工作...")
}
func (p Phone) Call() { //该方法未定义
fmt.Println("我是手机,我要打电话...")
}
//相机实现USB接口方法
func (c Camera) Start() {
fmt.Println("相机开始工作...")
}
func (c Camera) Stop() {
fmt.Println("相机停止工作...")
}
//编写一个方法Working,接收一个USB接口类型变量
//实现了USB接口的所有方法
func (c Computer) Working(usb Usb) {
//通过usb接口变量调用start和stop方法
usb.Start()
//如果USB是指向Phone结构体变量,还需要调用Call方法
phone, ok := usb.(Phone)
if ok {
phone.Call()
}
usb.Stop()
}
func main() {
var usbArr [3]Usb
usbArr[0] = Phone{}
usbArr[1] = Camera{}
usbArr[2] = Phone{}
//Phone还有一个特有的方法call(),请遍历Usb数组,如果是Phone变量,
//除了调用Usb接口声明的方法外,还需要调用Phone特有方法Call(类型断言)
var computer Computer
for _, v := range usbArr {
computer.Working(v)
}
}