Golang 之 面向对象继承(四)

版权声明:本文为博主原创文章,转载文章须附上文章来源与作者。 https://blog.csdn.net/ChangerJJLee/article/details/81098843

并没有为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 ()方法覆盖了

猜你喜欢

转载自blog.csdn.net/ChangerJJLee/article/details/81098843