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开链接电脑

 三:

posted @ 2019-01-21 16:26  louis-sun  阅读(486)  评论(0)    收藏  举报