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)

}

posted @ 2021-07-29 09:31  zhanghuiyan  阅读(97)  评论(0)    收藏  举报