首页  >  文章  >  后端开发  >  Go如何在没有传统继承的情况下实现方法重写?

Go如何在没有传统继承的情况下实现方法重写?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-16 00:55:03627浏览

How does Go achieve method overriding without traditional inheritance?

Golang 方法重写

在 Go 中,方法重写的概念是使用接口来实现的,而不是像 Java 中那样通过继承来实现。接口定义方法的契约,但不指定其实现。

在 Go 中实现方法重写:

使用接口:

  1. 用你想要的方法签名定义一个接口override。
  2. 定义一个实现接口的类型,并提供重写实现。
  3. 在原始类型中,使用接口类型作为要调用的方法的参数已覆盖。

示例:

// Interface for Get() method
type Getter interface {
    Get() string
}

// Base type with original implementation
type Base struct{}

func (base *Base) Get() string {
    return "base"
}

// Custom type with overriding implementation
type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}

优点:

  • 保留基础,同时提供覆盖 Get() 的 mogelijkheid

使用组合的替代方法:

  1. 定义一个嵌入原始类型并包含重写实现的结构。
  2. 使用嵌入类型访问原始

示例:

// Sub type with composition
type Sub struct {
    Base
    custom string
}

func (sub *Sub) Get() string {
    // Access the original method via embedded Base
    if sub.custom == "" {
        return sub.Base.Get()
    }
    return sub.custom
}

优点:

  • 维护单一类型定义无需额外接口

注意:

  • 请注意,使用此方法可能会破坏假定原始类型行为的现有代码。
  • Go 对组合和鸭子类型的强调有利于使用接口进行方法重写,而不是传统的基于继承的覆盖。

以上是Go如何在没有传统继承的情况下实现方法重写?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn