package main

import 	"fmt"

type IAnimal interface {

	Run()

}
type Animal struct{}

func (a *Animal) Escape(ianimal IAnimal) {

	ianimal.Run()

}

func (a *Animal) Run() {

	fmt.Printf("Animal Run.\n")
}

type Dog struct {

	s Animal
}

func (d *Dog) Run() {

	fmt.Printf("Dog Run.\n")
}

func main() {

	dog := &Dog{}
	dog.s.Escape(dog) //触发 Dog Run
	ad:=&Animal{}
	ad.Escape(ad)//触发 Animal Run

}