Zhong__Go语言“继承“和多态

时间:2021.09.22

环境:

目的:简易阐述Go语言"面向对象"三大特性

说明:

作者:Zhong QQ交流群:121160124 欢迎加入!

编程语言面向对象开发中的三大特性:封装、继承和多态,在Go语言中是怎么实现的呢?首先需要了解这个问题:

Go 是否是面向对象语言?

Go语言并没有严格的说明是否是面向对象编程语言,但相应的特性都有对应的实现!

封装

对于封装简单来说就是将一些功能的实现代码封装在一个个方法、模块或包中,形成结构清晰功能分明的层次,在使用时调用相关方法即可。

继承

Go语言之中没有继承的概念  使用(类型)组合替代了其它面向对象开发语言里的继承

下面通过一段代码来体现Go语言中的继承

package main

import (
	"fmt"
)

type Monkey struct {
	Name string
	Age  int
}

func (m *Monkey) Climb() {
	fmt.Println(m.Name, "会爬树")
}

type Wukong struct {
	Monkey
    Alias string
}

func (w *Wukong) Fly() {
    fmt.Println(w.Alias, "通过拜师学艺,学会了飞")
}

func main() {
	wukong := Wukong{
		Monkey{
			Name: "SunWukong",
			Age:  18,
		},
        "齐天大圣",
	}
    wukong.Climb()
    wukong.Fly()
	fmt.Println(wukong.Name)
}

多态

Go语言通过接口实现了多态和扩展功能 也起到了规范的作用

下面通过一段代码来体现Go语言中的多态

package main

import (
    "fmt"
)

// 定义一个Usb接口 包含两个方法
type Usb interface {
    Insert()
    Takeout()
}

// 定义一个Computer
type Computer struct {

}

type Phone struct {

}

type Camera struct {

}

type Pod struct {

}

// Computer有一个Working方法 接收一个Usb接口类型参数并调用两个方法
func (c Computer) Working(u Usb) {
    u.Insert()
    // 如果是Phone类型 调用Phone特有的Charge()方法
    if phone, ok := u.(Phone); ok {
        phone.Charge()
    }
    u.Takeout()
    fmt.Println()
}

// Phone实现了Insert和Takeout方法 也实现了Usb接口
func (p Phone) Insert() {
    fmt.Println("手机已插入接口")
}

// Phone特有的方法
func (p Phone) Charge() {
    fmt.Println("手机已开始充电")
}

func (p Phone) Takeout() {
    fmt.Println("手机已拔出接口")
}

// Camera实现了Insert和Takeout方法 也实现了Usb接口
func (c Camera) Insert() {
    fmt.Println("相机已插入接口")
}

func (c Camera) Takeout() {
    fmt.Println("相机已拔出接口")
}

// Pod没有同时实现Insert和Takeout方法 所以没有实现Usb接口
func (p Pod) Insert() {
    fmt.Println("Pod已插入接口")
}

// func (p Pod) Takeout() {
//  fmt.Println("Pod已拔出接口")
// }

func main() {
    // 创建一个Computer对象
    computer := Computer{}

    // 创建Phone、Camera对象
    phone := Phone{}
    camera := Camera{}

    // computer调用Working方法 传递任意一个实现了Usb接口的对象
    computer.Working(phone)
    computer.Working(camera)
    
    // pod不能被computer调用
    // pod := Pod{}
    // computer.Working(pod)
}

关注微信公众号  加入qq交流群 121160124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我变了_我没变

随意 。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值