Go面向对象之多态
一:在Golang中多态是通过接口(interface)实现的。
package main
import (
"fmt"
)
//Usb接口
type Usb interface{
start()
stop()
}
//手机结构体
type Phone struct{
Name string
}
func (this Phone) start(){
fmt.Println("手机链接电脑成功")
}
func (this Phone) stop(){
fmt.Println("手机断开链接电脑")
}
//Mp3结构体
type Mp3 struct{
Name string
}
func (this Mp3) start(){
fmt.Println("Mp3接电脑成功")
}
func (this Mp3) stop(){
fmt.Println("Mp3开链接电脑")
}
//电脑结构体
type Computer struct{
}
//Usb接口类型,即实现了Usb声明的所有方法的结构体变量
//否则报错
func (c Computer) Working(usb Usb) {
usb.start()
usb.stop()
}
func main() {
computer := Computer{}
phone := Phone{}
mp3 := Mp3{}
computer.Working(phone)
computer.Working(mp3)
}
结果
[ `go run struct_interface.go` | done ]
手机链接电脑成功
手机断开链接电脑
Mp3接电脑成功
Mp3开链接电脑
二:接口多态的两种形式
①:多态参数,即第一大类。
②:多态数组(接口多态数组)
package main
import (
"fmt"
)
//Usb接口
type Usb interface{
start()
stop()
}
//手机结构体
type Phone struct{
Name string
}
func (this Phone) start(){
fmt.Println("手机链接电脑成功")
}
func (this Phone) stop(){
fmt.Println("手机断开链接电脑")
}
//Mp3结构体
type Mp3 struct{
Name string
}
func (this Mp3) start(){
fmt.Println("Mp3接电脑成功")
}
func (this Mp3) stop(){
fmt.Println("Mp3开链接电脑")
}
func main() {
var usb_arr [2]Usb
usb_arr[0] = Phone{}
usb_arr[1] = Mp3{}
usb_arr[0].start()
usb_arr[0].stop()
usb_arr[1].start()
usb_arr[1].stop()
}
结果
[ `go run struct_interface.go` | done ]
手机链接电脑成功
手机断开链接电脑
Mp3接电脑成功
Mp3开链接电脑
三:

浙公网安备 33010602011771号