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()         // 引擎直接暴露,可以直接调用
}
相关推荐
GetcharZp1 小时前
只需 10 分钟,轻松实现异地组网!Netmaker 保姆级部署教程来了
后端
Drone_xjw1 小时前
从 GDB 到 CDB:C/C++ 程序调试的两把“手术刀”
c语言·开发语言·c++
前端兰博1 小时前
03-Spring Boot
后端
前端兰博1 小时前
01-Java开发基础语言
后端
SL-staff1 小时前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
前端兰博1 小时前
02-Servlet、JDBC、Maven、Mybatis
后端
xurime2 小时前
Excelize 开源十周年,发布 2.11.0 版本
golang·开源·github·excel·导出·导入·excelize·基础库
咖啡八杯2 小时前
GoF设计模式——模板方法模式
java·后端·spring·设计模式
码事漫谈3 小时前
Loop 正在排斥人为操作
后端
爱勇宝3 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员