第7章:方法
方法定义
方法总是绑定对象实例,并隐式将实例作为第一实参 (receiver)。
一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。
1 2 3
| func (recevier type) methodName(参数列表)(返回值列表){}
参数和返回值可以省略
|
匿名字段
可以像字段成员那样访问匿名字段方法,编译器负责查找。
通过匿名字段,可获得和继承类似的复用能力。依据编译器查找次序,只需在外层定义同名方法,就可以实现 “override”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| package main
import "fmt"
type User struct { id int name string }
type Manager struct { User title string }
func (self *User) ToString() string { return fmt.Sprintf("User: %p, %v", self, self) }
func (self *Manager) ToString() string { return fmt.Sprintf("Manager: %p, %v", self, self) }
func main() { m := Manager{User{1, "Tom"}, "Administrator"}
fmt.Println(m.ToString())
fmt.Println(m.User.ToString()) }
|