Go语言中面向对象的三大特性之继承的理解

Go没有传统意义上的继承,而是通过组合实现代码复用。

举例说明:

首先定义一个引擎:

Go 复制代码
// 引擎
type Engine struct {
    Power    int    // 马力
    FuelType string // 燃油类型
}
复制代码
func (e *Engine) Start() {
    fmt.Printf("%d马力 %s 引擎启动\n", e.Power, e.FuelType)
}

func (e *Engine) Stop() {
    fmt.Println("引擎关闭")
}

其次,定义一个汽车:

复制代码
// 汽车(组合引擎)
type Car struct {
    Brand    string
    Color    string
    Engine   // 嵌入 Engine,汽车"拥有"一个引擎
}

func (c *Car) Drive() {
    fmt.Printf("%s %s 颜色的汽车正在行驶\n", c.Brand, c.Color)
    c.Engine.Start()  // 调用嵌入引擎的方法
}

func main() {
    car := Car{
        Brand:  "比亚迪",
        Color:  "红色",
        Engine: Engine{
            Power:    200,
            FuelType: "电动",
        },
    }
    
    car.Drive()        // 输出:比亚迪 红色 颜色的汽车正在行驶
    car.Engine.Start() // 输出:200马力 电动 引擎启动
    car.Stop()         // 引擎直接暴露,可以直接调用
}
相关推荐
亿牛云爬虫专家12 小时前
Go爬虫进阶:如何优雅地在Colly框架中实现无缝代理切换?
爬虫·中间件·golang·爬虫代理·colly框架·代理切换·api提取
每天吃饭的羊12 小时前
UMD和IIfe
开发语言·前端·javascript
gCode Teacher 格码致知12 小时前
Javascript提高:自定义的占位符替换-由Deepseek产生
开发语言·javascript·ecmascript
是个西兰花12 小时前
C++11:智能指针
开发语言·c++·智能指针·rall
无厚13 小时前
Spring Boot中LLM流式交互的核心原理
后端·设计
摇滚侠13 小时前
Java 零基础全套视频教程,面向对象(高级),笔记 105-120
java·开发语言·笔记
CN-Dust13 小时前
【C++专题】输出cout例题
开发语言·c++
叶落阁主13 小时前
Spring Boot 4 实战:Jackson 2.x 升级到 3.x 踩坑全记录
java·后端·架构
时空系13 小时前
第6篇:多维数据盒——管理大量数据 python中文编程
开发语言·python·ai编程