Golang 中的多态性

这是我想要的简单示例:


我有 B 的对象并使用结构 A 中的函数 step1(通用功能)。我需要为在 A 内部运行的 B 重新定义函数 step2。


package main


import "fmt"


type A struct {}


func (a *A) step1() {

    a.step2();

}


func (a *A) step2 () {

   fmt.Println("get A");

}



type B struct {

   A

}


func (b *B) step2 () {

   fmt.Println("get B");

}


func main() {

    obj := B{}

    obj.step1() 

}

我该怎么做?


// maybe 

func step1(a *A) {

   self.step2(a);

}


浮云间
浏览 117回答 1
1回答

烙印99

Go 不做多态性。您必须根据接口和采用这些接口的函数(而不是方法)重新定义您想要做的事情。所以想想每个对象需要满足什么接口,然后你需要在那个接口上工作什么功能。go 标准库中有很多很棒的例子,例如io.Reader,io.Writer以及对这些起作用的函数,例如io.Copy。这是我尝试将您的示例改写为这种风格的尝试。它没有多大意义,但希望它会给你一些工作。package mainimport "fmt"type A struct {}type steps interface {    step1()    step2()}func (a *A) step1() {    fmt.Println("step1 A")}func (a *A) step2() {    fmt.Println("get A")}type B struct {    A}func (b *B) step2() {    fmt.Println("get B")}func step1(f steps) {    f.step1()    f.step2()}func main() {    obj := B{}    step1(&obj)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go