go语言接口之多态
糙话理解
- 接口中的同名方法,可以由不同的实例对象来实现,从而产生不同的结果
疑问
- 所有的接口都是指针类型吗?
- 函数 func sendMesage(n Message) {} 的参数中的Message是个接口 。
- 在调用 sendMesage(&bill) 的函数中我们给函数传入的是一个指针。
go语言实现多态的示例
package main
import (
"fmt"
)
type Message interface {
sending()
}
type User struct {
name string
phone string
}
type Admin struct {
name string
phone string
}
func (u *User) sending() {
fmt.Printf("Sending user phone to %s<%s>\n", u.name, u.phone)
}
func (a *Admin) sending() {
fmt.Printf("Sending admin phone to %s<%s>", a.name, a.phone)
}
func sendMesage(n Message) {
n.sending()
}
func main() {
bill := User{
name: "Barry",
phone: "1551959",
}
// 调用方式可以直接通过实例调用,也可以通过sendMesage函数调用
bill.sending()
// 这里调用 sendMesage 函数,如果传入的参数不是一个指针是会报错的
sendMesage(&bill)
lisa := Admin{
name: "Jim",
phone: "166151",
}
lisa.sending()
sendMesage(&lisa)
// 这里我们使用一个字符串类型的变量传入他的指针给到 sendMesage 函数,此时会报 a 没有 sending 方法
// a := "哈哈哈哈"
// sendMesage(&a)
}
本文来自博客园,作者:zhanghuiyan,转载请注明原文链接:https://www.cnblogs.com/zhanghuiyan/p/15073641.html

浙公网安备 33010602011771号