Go:嵌入式结构中的接口方法覆盖

时间:2015-05-22 14:56:56

标签: interface go override

请考虑以下代码:

type Intf interface {
    Method()
}

type TypeA struct {
    TypeBInst Intf
}

func (*TypeA) Method() {
    log.Println("TypeA's Method")
}

func (t *TypeA) Specific() {
    t.TypeBInst.Method() // Call override from TypeB
    log.Println("Specific method of TypeA")
}

type TypeB struct {
    *TypeA
}

func (*TypeB) Method() {
    log.Println("TypeB's Method")
}

是否有另一种方法可以从func (*TypeB) Method()内部调用func (t *TypeA) Specific(),而不是将TypeB实例存储在TypeA {@ 1}}实例内TypeB 1}?它反对golang原则吗?

工作示例:playground

1 个答案:

答案 0 :(得分:0)

  

是否有另一种方法从func(t * TypeA)内部调用func(* TypeB)方法()而不是在TypeB的嵌入式TypeA实例中存储指向TypeB实例的指针?

是的,there is

package main

import "log"

type TypeB struct{}

func (*TypeB) Method() {
    log.Println("TypeB's Method")
}

func main() {
    (*TypeB).Method(nil)
}

但它仅适用于nilable接收器(不需要接收器的实例)。

  

它反对golang原则吗?

不是我所知道的,但我个人从未在任何项目中都要求这样做。