接口的定义和实现

package main

import "fmt"

//定义接口类型
type Humaner interface {
   //方法,只有声明,没有实现,由别的类型(自定义类型)实现
  sayhi()
}

type Student struct {
   name string
   id   int
}

//Student实现了此方法
func (tmp *Student) sayhi() {
   fmt.Printf("Student[%s, %d] sayhi\n", tmp.name, tmp.id)
}

type Teacher struct {
   addr  string
   group string
}

//Teacher实现了此方法
func (tmp *Teacher) sayhi() {
   fmt.Printf("Teacher[%s, %s] sayhi\n", tmp.addr, tmp.group)
}

type Mystr string

//Mystr实现了此方法
func (tmp *Mystr) sayhi() {
   fmt.Printf("MyStr[%s] sayhi\n", *tmp)
}

//定义一个普通函数,函数的参数为接口类型
func whoSayHi(i Humaner) {
   i.sayhi()
}

func main() {
   s := &Student{"mike", 666}
   t := &Teacher{"bj", "go"}

   var str Mystr = "hello mike"

  //调用同一个函数,不同的表现 多态,多种形态
  whoSayHi(s)
   whoSayHi(t)
   whoSayHi(&str)

   //创建一个切片
  x := make([]Humaner, 3)
   x[0] = s
   x[1] = t
   x[2] = &str

   //第一个返回下标,第二个返回下标对应的值
  for _, i := range x {
      i.sayhi()
   }

}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!