4-5 接口的继承

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()
}

 

posted @ 2019-06-26 19:50  pad+  阅读(115)  评论(0编辑  收藏  举报