当前位置: 首页 > 面试题库 >

Go lang中的多态性

相旭
2023-03-14
问题内容

我正在学习go lang,我想知道是否可以做这样的事情:

type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}

在面向对象的语言中,这样的代码应该可以正常工作,但是在执行过程中会抛出一个错误,说getFoo()必须返回Foo类的实例

有没有一种方法可以类似于我在Go中描述的多态性?


问题答案:

Go不是典型的OO语言。同样,每种语言都有自己的处理方式。您可以使用界面和组成来实现所需的目标,如下所示:

package main

import "fmt"

type Foo interface {
   printFoo()
}

type FooImpl struct {

}

type Bar struct {
   FooImpl
}

type Bar2 struct {
   FooImpl
}

func (f FooImpl)printFoo(){
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
   return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}

http://play.golang.org/p/iR8QkD3DnP



 类似资料:
  • 本文向大家介绍Java中的多态性,包括了Java中的多态性的使用技巧和注意事项,需要的朋友参考一下 多态是对象采取多种形式的能力。当使用父类引用来引用子类对象时,会在OOP中最常见地使用多态。 任何可以通过多个IS-A测试的Java对象都被视为多态的。在Java中,所有Java对象都是多态的,因为任何对象都将通过IS-A测试以了解其自身类型和Object类。 重要的是要知道访问对象的唯一可能方法是

  • 问题内容: 我有一个XML文档。一些字段具有自定义格式。例: 我想将其导入如下结构: 有什么方法可以实现自定义解码器,它将行字符串拆分成行数组()? 可以将Lines字段设置为字符串类型,并在xml导入后进行拆分,但这似乎不是一个很好的解决方案。我有什么方法可以定义用于行分割的自定义解码器,并将其与xml解码器组合? 问题答案: 您可以通过定义符合接口的新类型来实现。因此,与其创建一个,而不是使用

  • 有人能提供一个简单的例子来解释Java中动态多态性和静态多态性之间的区别吗?

  • 我在类A中创建了两个方法,并在类B中重写,如下所示。我有一些关于动态多态性和重写的问题。 重写和动态多态总是同时发生吗?

  • 问题内容: 我想我一直在考虑针对以下问题的多态解决方案: 假设我有一个with字段用于交易。现在,我有两种特殊的交易类型:和。 目前只有的组成。 由和组成。 我还有一个函数,该函数在字段上具有一些逻辑,但最后是使用并保存某处序列化整个对象。 https://play.golang.org/p/0Vu_YXktRIk 我试图弄清楚如何实现在两种事务上都可以使用的结构和功能,但是最后正确地序列化了这两

  • 本文向大家介绍解释PHP中的多态性。,包括了解释PHP中的多态性。的使用技巧和注意事项,需要的朋友参考一下 首先,多态是从希腊语Poly(表示很多)和morphism(表示形式)中获得的。 多态描绘了面向对象编程中的一个示例,在该示例中,具有相似功能的各个类中的方法应具有相似的名称。多态本质上是一种OOP模式,它使具有不同功能的多个类可以执行或共享commonInterface。多态性的用处在于,