1.6.8 Go语言面向对象编程
一、面向对象编程
面向对象编程思想有三大特征
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式
继承:使得子类具有父类的属性和方法或者重新定义,追加属性和方法等
多态:不同对象中同种行为的不同实现方式
二、封装
属性:
在Go语言中可以使用结构体对属性进行封装,结构体就像是类的一种简化形式,如:定义三角形的三边
type Triangle struce { LineA float32 LineB float32 LineC float32 }
方法:
Go语言中的方法是作用在接者上的一个函数,接受者是某种类型的变量,因此也是一种特殊类型的函数
方法定义格式:
func (recv recv_type) methodName (parameter_list) (return_value_list) {...}举例:计算圆形面积
// Circle 圆形结构体 type Circle struct { Radius float32 } // Area 计算圆形面积 func (t *Circle) Area() float32 { return t.Radius * t.Radius * 3.14 } func main() { r := Circle{10} // 调用计算面积方法 fmt.Println(r.Area()) }结果:314
访问权限
Go语言中,使用方法名首字母大小写来判断他们能否被其他包访问或调用,大写,表示可以(类似:Public),小写则只能在包内调用(类似:Private)
权限定义规则适应与常量、变量、类型、接口、函数等
也可以通过函数实现获取和设置属性的方式
type Student struct { name string age float32 } // 获取name func (stu *Student) GetName() string { return s.name } // 设置name func (stu *Student) SetName(name string) { s.name = name }
三、继承
Go语言中没有
extends关键字,它使用在结构体中内嵌匿名类型的方法来实现继承举个例子:定义一个Engine接口类型和一个Bus结构体,让Bus结构体包含一个Engine类型的匿名字段
将上述代码中的匿名字段Engine晋升成为外层类型Bus的方法,可构建出如下代码
四、多态
在Go语言中,可以使用接口实现这个特征,有关接口的内容会在1.7中详解
定义一个正方形和一个三角形
添加计算面积的方法,通过接口定义
结果:
Last updated