package main

import "fmt"

type Human struct {
	name string
	sex  string
}

func (this *Human) Eat() {
	fmt.Println("Human.Eat()...")
}

func (this *Human) Walk() {
	fmt.Println("Human.Walk()...")
}

type Superman struct {
	Human
	level int
}

func (this *Superman) Eat() {
	fmt.Println("Superman.Eat()...")
}

func (this *Superman) Fly() {
	fmt.Println("Superman.Fly()...")
}

func (this *Superman) Show() {
	fmt.Println("name = ", this.name)
	fmt.Println("sex = ", this.sex)
	fmt.Println("level = ", this.level)
}

func main() {
	h := Human{"zhang3", "female"}
	h.Eat()
	h.Walk()

	var s Superman
	s.name = "li4"
	s.sex = "male"
	s.level = 96
	// s := Superman{Human{"li4", "female"}, 88}
	s.Walk() // 父类方法(子类没有重载)
	s.Eat()  // 子类方法
	s.Fly()  // 子类方法
	s.Show()
}