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()         // 引擎直接暴露,可以直接调用
}
相关推荐
专注VB编程开发20年几秒前
delphi死嗑Pascal冷门编程语言,Borland不认可 “通用多语言 IDE”,认为 “专有语言才是护城河”
开发语言·ide·delphi
hzxpaipai1 分钟前
外贸网站制作:为何派迪科技做的网站性能与打开速度如此不错?
开发语言·前端·网络·科技·安全
于先生吖2 分钟前
高并发稳定运营,JAVA 动漫短剧小程序 + H5 源码
java·开发语言·小程序
青桔柠薯片3 分钟前
I²C 总线协议学习总结:从开漏逻辑到读写事务的工程视角
c语言·开发语言·学习
中科三方6 分钟前
域名NS记录修改全攻略:规则、误区、实操流程和常见问题
java·后端·spring
2401_8274999912 分钟前
python核心语法04-函数
开发语言·python
重生之我是Java开发战士13 分钟前
【笔试强训】Week1:点击消除,数组中两个字符串的最小距离,dd爱框框,腐烂的苹果,大数乘法
java·开发语言·算法
独特的螺狮粉13 分钟前
开源鸿蒙跨平台Flutter开发:地震震源探测系统-地震波形与波干涉渲染架构
开发语言·flutter·华为·架构·开源·harmonyos
Full Stack Developme18 分钟前
SpringBoot配置文件优先级详解
java·spring boot·后端
牧瀬クリスだ19 分钟前
优先级队列——堆
java·开发语言·数据结构