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

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

Mary-Kate Olsen
发布: 2024-11-16 00:55:03
原创
706 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板