首先 Golang 中没有对象的概念,但基于现有的语法是可以写出面向对象的代码。
另外面向对象是一种编程思想, 并不局限于编程语言本身
那么 talk is cheap show me the code
让我们看看 Golang 中的 面向对象 怎么玩转 加减运算
回顾结构体
type Add struct {
Num1 int
Num2 int
}
以上代码用 结构体 表示了 算法中加法,用面向对象的思维来理解,Num1
和Num2
是两个成员变量。那么,我们就应该思考,如何编写成员方法
呢?
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 中的应用,希望对您有所得益