Go之继承的实现

go的继承是使用匿名字段来实现的

package util

//----------------Person----------------
type Person struct {
	Name string
	Age  int
	Sex  string
}


//--------------------------------
//----------------Boy----------------
type Boy struct {
	Person
	X string
}


//--------------------------------
//----------------Girl----------------
type Girl struct {
	Person
	Y string
}

//--------------------------------

//匿名字段可以实现类似继承的效果
// boy := util.Boy{util.Person{"Eric", 19, "boy"}, "1"}
// girl := util.Girl{util.Person{"Jessica", 19, "girl"}, "2"}
// fmt.Println(boy)
// fmt.Println(girl)

  方法的重写override通过在子类中重新定义同名函数来实现,reciever接收的是子类的实例

package util

//----------------Person----------------
type Person struct {
	Name string
	Age  int
	Sex  string
}

func (self *Person) Speak() string {
	return "I am a person"
}

//--------------------------------
//----------------Boy----------------
type Boy struct {
	Person
	X string
}

func (self *Boy) Speak() string {
	return "I am a Boy"
}

//--------------------------------
//----------------Girl----------------
type Girl struct {
	Person
	Y string
}

func (self *Girl) Speak() string {
	return "I am a Girl"
}

//--------------------------------

// 方法重写的实现override
// boy := util.Boy{util.Person{"Eric", 19, "boy"}, "1"}
// fmt.Println(boy.Speak())
// girl := util.Girl{util.Person{"Jessica", 19, "girl"}, "2"}
// fmt.Println(girl.Speak())

  

原文地址:https://www.cnblogs.com/anbylau2130/p/4864545.html