1. 程式人生 > >Golang 之 面向物件繼承(四)

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 ()方法覆蓋了