Golang 之 面向对象继承(四)

并没有为PhonePlus 实现接口,仅仅为Phone实现了接口,不过PhonePlus里面嵌入了Phone的一个内部类型,也是可以通过接口调用函数Call来调用到Communicate method。

在main函数,发现PhonePlus的methods set 里面包含了Communicate()

package main

import "fmt"

type Phone struct {
    OS string
    Net string
}
type PhonePlus struct {
    Phone
    Plus string
}
type PhoneFunction interface {
    Communicate()
    Online()
}

func Call(OnePhone PhoneFunction) {
    OnePhone.Communicate()
}
func QQ(OnePhone PhoneFunction) {
    OnePhone.Online()
}

func (p Phone) Communicate() {
    fmt.Printf("...呼叫中 \n")
}

func (p Phone) Online() {
    fmt.Printf("...上网中 \n")
}


func main() {
    p := &PhonePlus{Phone{"ios", "5G"},"5.0"}
    fmt.Printf("%+v ", p)
    Call(p)
    QQ(p)
    fmt.Printf("%+v ", p.Phone)
    Call(p.Phone)
    QQ(p.Phone)

}
  • 嵌入类型的类型中,外部类型自己未曾实现的methods被携带的内部函数实现时,外部类型也会将这些methods加入到自己的methods set里。

  • 那么,如果外部类型PhonePlus 自己实现了Communicate()函数(同时也实现了接口),内部和外部都实现的情况下会怎样呢?

  • 发现PhonePlus 的使用了自己实现的方法,或者说它把内部Cat的Phone ()方法覆盖了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JaysenLeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值