1.6.8 Go语言面向对象编程

一、面向对象编程

  1. 面向对象编程思想有三大特征

    1. 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式

    2. 继承:使得子类具有父类的属性和方法或者重新定义,追加属性和方法等

    3. 多态:不同对象中同种行为的不同实现方式

二、封装

  1. 属性:

    1. 在Go语言中可以使用结构体对属性进行封装,结构体就像是类的一种简化形式,如:定义三角形的三边

      type Triangle struce {
          LineA float32
          LineB float32
          LineC float32
      }
  2. 方法:

    1. Go语言中的方法是作用在接者上的一个函数,接受者是某种类型的变量,因此也是一种特殊类型的函数

    2. 方法定义格式:

      func (recv recv_type) methodName (parameter_list) (return_value_list) {...}
    3. 举例:计算圆形面积

      // 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

  3. 访问权限

    1. Go语言中,使用方法名首字母大小写来判断他们能否被其他包访问或调用,大写,表示可以(类似:Public),小写则只能在包内调用(类似:Private)

    2. 权限定义规则适应与常量、变量、类型、接口、函数等

    3. 也可以通过函数实现获取和设置属性的方式

      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
      }

三、继承

  1. Go语言中没有extends关键字,它使用在结构体中内嵌匿名类型的方法来实现继承

  2. 举个例子:定义一个Engine接口类型和一个Bus结构体,让Bus结构体包含一个Engine类型的匿名字段

  3. 将上述代码中的匿名字段Engine晋升成为外层类型Bus的方法,可构建出如下代码

四、多态

  1. 在Go语言中,可以使用接口实现这个特征,有关接口的内容会在1.7中详解

  2. 定义一个正方形和一个三角形

  3. 添加计算面积的方法,通过接口定义

    结果:

Last updated