GO接口方法集

interface! method! struct!
go不是面向对象的语言,它里面没有类和对象。
go是函数式的编程语言,它里面只有以interface、struct、method。

直接上段我整理过的可执行的代码,我在里面加入了注释,自己看吧:

package main

import "fmt"

type Do interface {
	Speak(content string)
}

type Cat struct {
	Name string
	Color string
}

func (c Cat)Speak(content string)  {
	fmt.Printf("%s speak : %s\n",c.Name,content)
}
func (d *Dog)Speak(content string)  {
	fmt.Printf("%s speak : %s\n",d.Name,content)
}

type Dog struct {
	Name string
	Color string
}

func doSpeak(do Do,content string)  {
	do.Speak(content)
}

type BlackCat struct{
	Cat
	Age int
}

type WhiteCat struct {
	Cat
	Age int
}

func (wc WhiteCat)Speak(content string)  {
	content = "this is white "+wc.Cat.Name+" "+content
	fmt.Println("inner : ",content)
}


func main() {
	c1 := Cat{Name:"c1",Color:"black"}
	doSpeak(c1,"喵喵喵~~~~~~")
	c2 := &Cat{Name:"c2",Color:"black"}
	doSpeak(c2,"喵喵喵~~~~~~")

	//说明Dog的speak()是绑定指针型Dog的,没要以传地址的方式调用,golang默认都是传值
	d1 := Dog{Name:"d1",Color:"black"}
	//doSpeak(d1)  //错误
	doSpeak(&d1,"汪汪汪~~~~~~") //正确
	d2 := &Dog{Name:"d2",Color:"black"}
	doSpeak(d2,"汪汪汪~~~~~~")

	//重点: black并未实现Do interface,这时是函数使用内部Cat的方法:func (c Cat)Speak(content string)
	bc := BlackCat{
		Cat:Cat{Name:"cat",Color:"black"},
		Age:2,
	}
	doSpeak(bc,"black 汪汪汪~~~~~~~")
	doSpeak(bc.Cat,".... 汪汪汪~~~~~~~~")

	//WhiteCat自实现一个Speak()方法看一下
	wc := WhiteCat{
		Cat:Cat{Name:"cat",Color:"white"},
		Age:3,
	}
	//whiteCat的方法Speak覆盖了Cat的
	doSpeak(wc,"吼吼~~~")
	//也可以这样调用Cat的Speak方法
	doSpeak(wc.Cat,"吱吱吱~~~~~~")

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值