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()         // 引擎直接暴露,可以直接调用
}
相关推荐
桦说编程5 小时前
并发编程中的等待-通知模式:从 wait/notify 到 Guava Monitor
后端
hsjiasb5 小时前
FreeRTOS学习(二十七)——任务栈与栈溢出检测
开发语言·stm32·学习·学习笔记·freertos
丰锋ff6 小时前
3.1 Qt事件之事件处理器
开发语言·qt
多弗朗皮卡丘6 小时前
C语言梦开始的地方7:函数
c语言·开发语言
月华路7 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
用户938515635077 小时前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
用户938515635077 小时前
实战 Todo CRUD —— 从路由到异常,手写一个完整模块
后端·typescript·nestjs
gugucoding7 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
m0_380743877 小时前
从零调用 Claude 教程
开发语言·python·node.js
GetcharZp7 小时前
Qdrant 向量数据库 Golang 实战指南:从零构建高性能检索应用
后端