1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 七 Go 语言面向对象编程

七 Go 语言面向对象编程

时间:2021-09-14 21:11:56

相关推荐

七 Go 语言面向对象编程

@Author:Runsen

在 Go 语言中没有类(Class)的概念,但这并不意味着 Go 语言不支持面向对象编程,毕竟面向对象只是一种编程思想。对于面向对象编程的支持Go 语言设计得非常简洁而优雅。

下面,我们主要介绍下Go面向对象编程的三大特性:封装、继承和多态。

封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式继承:使得子类具有父类的属性和方法或者重新定义、追加属性和方法等多态:不同对象中同种行为的不同实现方式

封装

下面代码中我们已经定义了一个矩形 Rectangle,定义一个方法 Area() 来计算它的面积,最后就可以调用 Area() 方法,计算面积。

package mainimport ("fmt")// 矩形结构体type Rectangle struct {Length intWidth int}// 计算矩形面积func (r *Rectangle) Area() int {return r.Length * r.Width}func main() {r := Rectangle{4, 2}// 调用 Area() 方法,计算面积fmt.Println(r.Area())}

在 Go 语言中没有 Java中的public、private、protected 这样的访问控制修饰符,它是通过字母大小写来控制可见性的。这个我在之前说过。

继承

GO语言的继承方式采用的是匿名组合的方式:Woman 结构体中包含匿名字段Person,那么Person中的属性也就属于Woman对象。

package mainimport "fmt"type Person struct {name string}type Man struct {Personsex string}func main() {man := Man{Person{"Runsen"}, "男"}fmt.Println(man.name) // Runsenfmt.Println(man.sex) // 男}

多态

在面向对象中,多态的特征为:不同对象中同种行为的不同实现方式。在 Go 语言中可以使用接口实现这一特征。接口的概念和Java中的接口一模一样,只不过定义不同,Go使用type 定义接口,Java使用interface 定义接口。

package mainimport ("fmt")// 正方形type Square struct {side float32}// 长方形type Rectangle struct {length, width float32}// 接口 Shapertype Shaper interface {Area() float32}// 计算正方形的面积func (sq *Square) Area() float32 {return sq.side * sq.side}// 计算长方形的面积func (r *Rectangle) Area() float32 {return r.length * r.width}func main() {r := &Rectangle{10, 2}q := &Square{10}// 创建一个 Shaper 类型的数组shapes := []Shaper{r, q}// 迭代数组上的每一个元素并调用 Area() 方法for n, _ := range shapes {fmt.Println("图形数据: ", shapes[n])fmt.Println("它的面积是: ", shapes[n].Area())}}/*图形数据: &{10 2}它的面积是: 20图形数据: &{10}它的面积是: 100*/

由以上代码输出结果可知:不同对象调用 Area() 方法产生了不同的结果,展现了多态的特征。

参考资料

官方教程: /《Go 入门指南》: /unknwon/the-way-to-go_ZH_CN

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。