为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
ITMISS 2021-07-01 14:07:49
我想实现这样的代码,其中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 mainimport (    "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()
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 278 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信