Можно ли вызвать переопределенный метод из родительской структуры в Голанге?
Я хочу реализовать такой код, где B наследуется от A и только переопределяет A 's Foo (), и я надеюсь, что код для печати B.Foo (), но он все еще печатает A.Foo (), кажется, что получатель в Golang может 'так не работает в C ++, в котором, когда динамическое связывание включено, код может работать так, как я хочу.
Я также публикую еще один кусок кода, который работает, но этоСлишком сложно для реализации, и больше похоже на взломать, я думаю, что этоЭто не стиль Голанга.
Итак, моя проблема: если родительУ метода Bar () есть некоторая логика, например, откройте файл, затем прочитайте несколько строк и используйте Foo (), чтобы вывести эти строки в стандартный вывод, и Child (в примере это B) хочет использовать большинство из них, единственное отличие состоит в том, что Child хочет, чтобы Foo () выводила строки в другой файл. Как мне это реализовать? Я слышал, что Голангнаследство можетработать как C ++ или Java, и чтоправильный путь на Голанге?
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()