Go 面向对象例子

49 阅读1分钟

go 语言面向对象不同于传统的方式,以下通过几个例子来展示 在 go 语言中的面向对象。

go 语言的封装

type Turtle struct {
	name string   // 其他包不能访问(首字母小写)
	Age  int      // 其他包能访问(首字母大写)
}

func NewTurtle() *Turtle {
	return &Turtle{name: "", Age: 0}
}

func (t *Turtle) GetName() string {
	return t.name
}

func (t *Turtle) SetName(name string) {
	t.name = name
}
// 类似于 java 的 toString() 方法
func (t *Turtle) String() string {
	return fmt.Sprintf("turtle name: %s, age: %d", t.name, t.age)
}

go 语言的继承:通过组合的方式

type Animal struct {
	Name string
	Age  int
}

type Turtle struct {
	Animal
	Weight float64
}

func main() {
	t := Turtle{Animal: Animal{Name: "Jerry", Age: 22}, Weight: 100}
	fmt.Println(t.Animal)
	fmt.Println(t.Animal.Name)
	fmt.Println(t.Animal.Age)
	fmt.Println(t.Weight)
}

go 语言的多态:通过 interface 实现

type Animal interface {
	run()
}

type Turtle struct{}

func (t *Turtle) run() {
	fmt.Println("Turtle is running.")
}

type Rabbit struct{}

func (r *Rabbit) run() {
	fmt.Println("Rabbit is running.")
}

func main() {
	var animal Animal
	animal = &Turtle{}
	animal.run()
	animal = &Rabbit{}
	animal.run()
}