type Animal struct {
Name string
}
type Old struct {
Age int
}
并给Animal类增加一个方法Walk()
func (a *Animal) Walk() {
fmt.Println("Animal Walk")
}
2. 让People类嵌套(继承)上面的Animal和Old类
这时可以有两种匿名嵌套(继承)方式
- 嵌套结构体指针
- 嵌套结构体
// 匿名嵌套,而且嵌套的是一个结构体指针
type People struct {
*Animal
Old
}
// 匿名嵌套,而且嵌套的是一个结构体
type People struct {
Animal
Old
}
非匿名嵌套的方式不太优雅
type People struct {
Animal Animal //非匿名嵌套Animal结构体
Old
}
3. new一个People
func NewPeople() *People {
return &People{
Animal: &Animal{Name: "bok"}, //嵌套结构体指针的方式,嵌套结构体时改成Animal: Animal{Name: "bok"} 即可
Old: Old{Age: 18},
}
}
4. 访问Walk()方法
people := NewPeople() people.Animal.Walk() // 访问父类的Walk people.Walk() // 访问自己的Walk方法(从父类Animal那里继承过来的) // Animal Walk // Animal Walk5. 重写父类Walk()方法
func (p *People) Walk() {
fmt.Println("Poeple Walk")
}
people := NewPeople() people.Animal.Walk() // 访问父类的Walk people.Walk() // 访问自己的Walk方法(重写父类的Walk方法) // Animal Walk // Poeple Walk6. 完整代码
package main
import "fmt"
type Animal struct {
Name string
}
type Old struct {
Age int
}
func (a *Animal) Walk() {
fmt.Println("Animal Walk")
}
type People struct {
*Animal
Old
}
func (p *People) Walk() {
fmt.Println("Poeple Walk")
}
func NewPeople() *People {
return &People{
Animal: &Animal{Name: "bok"},
Old: Old{Age: 18},
}
}
func main() {
people := NewPeople()
people.Animal.Walk()
people.Walk()
fmt.Println(people.Age)
fmt.Println(people.Name)
fmt.Printf("New people %v n", people)
}



