package main
import "fmt"
//定义两个父类接口
//定义动物接口
type Animal interface {
//新陈代谢
Eat(food string)(shit string)
Die()
}
//定义战士接口,会进攻和防守
type Filghter interface {
//并造成对手掉血
Attack()(blood int)
Defend()
}
//显示地继承父类接口
//野兽接口,拥有动物的一切特征
//野兽接口,用于战士的一切特征
//type Beast interface {
// //野兽接口继承动物接口
// Animal
// //野兽接口继承战士接口
// Filghter
// run()
//}
//隐式的继承父类接口
type Beast interface {
//显示的继承父类接口
Animal
//隐示的继承Filghter接口,没有明确说继承Filghter接口,但是方法都实现了。
Attack()(blood int)
Defend()
run()
}
type Tiger struct {
name string
food string
shit string
power int
}
func (t *Tiger)Eat(food string)(shit string) {
fmt.Printf("本王正在享用%s,并撇下了%s\n",t.food,t.shit)
return t.shit
}
func (t *Tiger)Die() {
fmt.Printf("大猫%s也有狗带的一天\n",t.name)
}
func (t *Tiger)Attack() (bloodLoss int) {
fmt.Printf("本王咬你,掉血%d毫升\n", t.power)
return t.power
}
func (t *Tiger)run() {
fmt.Printf("本王在奔跑")
}
func (t *Tiger)Defend() {
fmt.Printf("本王防守\n")
}
func main() {
//声明接口 接口不可以赋值
var animal Animal
var beast Beast
var fighter Filghter
tigerPtr := &Tiger{"东北虎", "其他动物", "翔", 1024}
animal= tigerPtr
beast = tigerPtr
fighter = tigerPtr
animal.Eat("其他动物")
fighter.Attack()
beast.run()
}