继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何在 Golang 中实现面向对象

锐玩道
关注TA
已关注
手记 70
粉丝 154
获赞 1427

图片描述

首先 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 中的应用,希望对您有所得益

打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP