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()         // 引擎直接暴露,可以直接调用
}
相关推荐
学习3人组4 分钟前
Workerman实现 WSS 基于客户端 ID 的精准推送
android·java·开发语言
Cache技术分享5 分钟前
355. Java IO API -去除路径中的冗余信息
前端·后端
beata7 分钟前
Spring Boot基础-3:Spring Boot 4.x 配置文件全攻略与多环境切换
spring boot·后端
Oneslide7 分钟前
yum离线库制作
后端
用户7344028193427 分钟前
Spring Boot 配置线程池详解,并使用@Async,执行异步方法
后端
Oneslide9 分钟前
disql 会提示「输入 xxx 的值:」
后端
Oneslide11 分钟前
达梦数据库开启自动提交
后端
锦木烁光11 分钟前
从零构建工业级流水号引擎:Spring Boot 2.7 + Redis 原子递增 + AntD Pro 全栈实战
后端
jolimark11 分钟前
Spring Boot 集成 Kettle
java·spring boot·后端
用户73440281934212 分钟前
Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭
后端