golang里面的多态怎么玩?

C++里面有多态是其三大特性之一,那么golang里面的多态我们该怎么实现?

golang里面有一个接口类型interface,任何类型只要实现了接口类型,都可以赋值,如果接口类型是空,那么所有的类型都实现了它。因为是空嘛。

golang里面的多态就是用接口类型实现的,即定义一个接口类型,里面声明一些要实现的功能,注意,只要声明,不要实现,

例如:type People interface {
    // 只声明
    GetAge() int 
    GetName() string 
}

然后你就可以定义你的结构体去实现里面声明的函数,你的结构体对象,就可以赋值到该接口类型了。

写了一个测试程序:

package main

import (
    "fmt"
)

type Biology interface {
    sayhi()
}

type Man struct {
    name string
    age  int
}

type Monster struct {
    name string
    age  int
}

func (this *Man) sayhi()  { // 实现抽象方法1
    fmt.Printf("Man[%s, %d] sayhi\n", this.name, this.age)
}

func (this *Monster) sayhi()  { // 实现抽象方法1
    fmt.Printf("Monster[%s, %d] sayhi\n", this.name, this.age)
}

func WhoSayHi(i Biology) {
    i.sayhi()
}


func main() {
    man := &Man{"我是人", 100}
    monster := &Monster{"妖怪", 1000}
    WhoSayHi(man)
    WhoSayHi(monster)
}
运行结果:

Man[我是人, 100] sayhi

Monster[妖怪, 1000] sayhi

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值