为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Golang 中实现面向对象

标签:
Go

图片描述

首先 Golang 中没有对象的概念,但基于现有的语法是可以写出面向对象的代码。

另外面向对象是一种编程思想, 并不局限于编程语言本身

那么 talk is cheap show me the code 让我们看看 Golang 中的 面向对象 怎么玩转 加减运算

回顾结构体

type Add struct {
	Num1 int
	Num2 int
}

以上代码用 结构体 表示了 算法中加法,用面向对象的思维来理解,Num1Num2是两个成员变量。那么,我们就应该思考,如何编写成员方法呢?

type Add struct {
	Num1 int
	Num2 int
}

func ( add *Add ) Operation() int {
	return add.Num1 + add.Num2
}

在关键字func和函数名之间加上一对小括号,写上与之关联的结构体类型的指针类型和变量名,推荐写成指针类型的原因是,函数传递的形参不是指针类型的话,无法覆盖实参。

实际上,此时 Operation() 就可以叫做成员方法了

继承

其他面向对象的语言,是使用extends关键字来表示继承的,而 go 语言中继承的设计非常简单,不需要额外的关键字。

type BaseNum struct {
	Num1 int
	Num2 int
}


// 加法
type Add struct {
	BaseNum
}

func ( add *Add ) Operation() int {
	return add.Num1 + add.Num2
}


// 减法
type Sub struct {
	BaseNum
}

func ( sub *Sub ) Operation() int {
	return sub.Num1 - sub.Num2
}

可以看到,在 Add 结构体中,我们使用到了 BaseNum 作为匿名变量

意思就是:Add 继承自 BaseNum。我们除了继承了成员变量和成员方法之外,还可以为 Add 结构体增加成员方法,重写成员方法。

接口

type Operation interface {
	Operation() int
}

图片描述
凡对象成员方法中,实现 Operation() 成员函数,皆视为继承 Operation 接口

多态

type BaseNum struct {
	Num1 int
	Num2 int
}

// 运算接口
type Operation interface {
	Operation() int
}

// 加法
type Add struct {
	BaseNum
}

func ( add *Add ) Operation() int {
	return add.Num1 + add.Num2
}

func main() {
	addOperation := Add{ BaseNum{ 1, 2 } }

	var operation Operation		// 声明接口
	operation = &addOperation	// 使用多态

	result := operation.Operation()
	fmt.Println( result )
}

以上就是 面向对象 中 封装继承多态 在 Golang 中的应用,希望对您有所得益

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消