是否可以从 Golang 中的父结构调用重写方法?

我想实现这样的代码,其中B继承A,只覆盖A的Foo()方法,希望代码打印B.Foo(),但还是打印A.Foo(),看来接收器在Golang 在 C++ 中不能这样工作,在启用动态绑定时,代码可以像我想要的那样工作。


我也贴了另外一段代码,可以用,但是实现起来太难了,更像是hack的方式,我觉得不是Golang的风格。


所以我的问题是:如果父的 Bar() 方法有一些逻辑,比如打开一个文件,然后读取一些行,并使用 Foo() 将这些行输出到stdout,而 Child(在示例中为 B)想要要使用其中的大部分,唯一的区别是 Child 希望 Foo() 将行输出到另一个文件。我应该如何实施它?听说Golang的继承不能像C++或Java那样工作,请问Golang的正确方法是什么?


package main 


import ( 

        "fmt" 


type A struct { 


func (a *A) Foo() { 

        fmt.Println("A.Foo()") 


func (a *A) Bar() { 

        a.Foo() 


type B struct { 

        A 


func (b *B) Foo() { 

        fmt.Println("B.Foo()") 


func main() { 

        b := B{A: A{}} 

        b.Bar() 

}


output: A.Foo()

以下作品有效,但在写入时


a := A{}

a.Bar()

你会遇到编译器错误


package main


import (

    "fmt"

)


type I interface {

    Foo()

}


type A struct {

    i I


}


func (a *A) Foo() {

    fmt.Println("A.Foo()")

}


func (a *A) Bar() {

    a.i.Foo()


}


type B struct {

    A

}


func (b *B) Foo() {

    fmt.Println("B.Foo()")

}


func main() {

    b := B{A: A{}}

    b.i = &b     // here i works like an attribute of b

    b.Bar()


output: B.Foo()


ITMISS
浏览 279回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go