go语言中的面向对象

方法

类的成员函数有时也称为方法。因此,方法可以认为是传统面向对象中类的成员函数。不同的是,go中方法可以绑定到任何类型上,但是成员函数只能属于类。

方法的接收者,附加的参数,用来代表类型,像this和self。

用来描述主调方法,就像向对象发送消息。

type Point struct {
    X float64
    Y float64
}

func (p Point) ScaleBy(X float64) {
    p.X *= X //很像this用于指向调用该成员函数的对象的地址。
    p.Y *= X
}
func main() {
    p1 := &Point{10, 20}
    p1.ScaleBy(300) //接受者和实例化的对象是没有关系的。
    fmt.Println(p1.X, p1.Y)
}
//输出10,20

指针接收者的方法和隐式转换的作用

不允许本身是指针的类型进行方法声明。

func (p *Point) ScaleBy(factor float64) {
    p.X *= factor
    p.Y *= factor
}
func main() {
    var p *Point = &Point{10, 20}
    var q Point = Point{1, 2}
    p.ScaleBy(300)
    q.ScaleBy(9)
    fmt.Println((*p).X, q.Y)//编译器会隐式解引用和取地址,一切看接收者形参的定义,自动隐式转换
//此时,输出3000,18

nil是一个合法的接收者(即空对象)

组合:通过结构体内嵌组成类型

与继承的不同,组合中的顺序也是无意义的。

方法变量与表达式

参考一等函数,方法做变量

封装

首字母大小写,要封装一个对象,只能通过结构体。

你可能感兴趣的:(go语言中的面向对象)