go实现面向对象特性

实现面向对象特性

封装

type Hero struct {
   Name  string
   Ad    int
   Level int
}

func (this *Hero) Show() {
   fmt.Println("Name = ", this.Name)
   fmt.Println("Ad = ", this.Ad)
   fmt.Println("Level = ", this.Level)
}
func (this *Hero) GetName() string {
   return this.Name
}
func (this *Hero) SetName(newName string) {
   //this是调用该方法的对象的-一个副本(拷员)
   this.Name = newName
}
func main() {
   //仙建一个对象
   hero := Hero{Name: "zhang3", Ad: 100, Level: 10}
   hero.Show()
   hero.SetName("li4")
   hero.Show()
   //fmt.Println(mymap)
}

继承

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 //SuperMan类继承了Human类的方法
	level int
}

//重定义父类的方法Eat()
func (this *SuperMan) Eat() {
	fmt.Println("SuperMan.Eat()...")
}

//子类的新方法
func (this *SuperMan) Fly() {
	fmt.Println("SuperMan.Fly()...")
}

func main() {
	h := Human{"zhang3", "female"}
	h.Eat()
	h.Walk()
	//定义一个子类对象
	s := SuperMan{Human{"li4", "female"}, 88}
	s.Walk() //父类的方法
	s.Eat()  //子类的方法
	s.Fly()  //子 类的方法
}

多态

有一个父类(有接口)
有子类(实现了父类的全部接口方法)
父类类型的变量(指针)指向(引用)子类的具体数据变量

//本质是一一个指针
type AnimalIF interface {
	Sleep()
	GetColor() string //获取动物的颜色
	GetType() string  //获取动物的种类
}

//具体的类
type Cat struct {
	color string //猫的颜色
}

func (this *Cat) Sleep() {
	fmt.Println("Cat is Sleep")
}
func (this *Cat) GetColor() string {
	return this.color
}
func (this *Cat) GetType() string {
	return "Cat"
}

//具体的类,
type Dog struct {
	color string
}

func (this *Dog) Sleep() {
	fmt.Println("Dog is Sleep")
}
func (this *Dog) GetColor() string {
	return this.color
}
func (this *Dog) GetType() string {
	return "Dog"
}

func showAnimal(animal AnimalIF) {
	animal.Sleep() //多态
	fmt.Println("color = 	", animal.GetColor())
	fmt.Println("kind = ", animal.GetType())
}
func main() {
	//var animal AnimalIF //接口的数据类型,父类指针
	//animal = &Cat{"Green"}
	//animal.Sleep() //调用的就是Cat的Sleep()方法
	//
	//animal = &Dog{"yellow"}
	//animal.Sleep() //调用的就是Dog的Sleep()方法

	cat := Cat{"Green"}
	dog := Dog{"Yellow"}
	showAnimal(&cat)
	showAnimal(&dog )

}	
posted @ 2021-10-06 10:23  野兽Gentleman  阅读(36)  评论(0编辑  收藏  举报