GO-面向对象5-接口的继承

定义两个父类接口

//定义动物接口:所有动物都会新陈代谢,都会挂掉
type Animal interface {
    //新陈代谢:吃进来+排出去,shit就是翔啊~
    Eat(food string) (shit string)
    //GAME OVER
    Die()
}

//定义战士接口,会进攻和防守
type Fighter interface {
    //进攻并造成对手掉血
    Attack() (bloodLoss int)
    Defend()
}

显式地继承父类接口

//野兽接口,拥有动物的一切特征
//野兽接口,拥有战士的一切特征
type Beast interface {
    //野兽接口继承动物接口
    Animal
    //野兽接口继承斗士接口
    Fighter
    Run()
}

隐式继承父类接口

type Beast interface {
    //显式继承动物接口
    Animal

    //隐式继承斗士接口:没有明确地说继承斗士,但事实上定义了其全部抽象方法
    Attack() (bloodLoss int)
    Defend()

    //野兽特有的方法
    Run()
}

实现Beast接口

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)Defend()  {
    fmt.Println("躺在地上举高高,我不是在卖萌,而是在防守")
}
func (t *Tiger)Run()  {
    fmt.Println("本王在奔跑")
}

使用接口实例

func main() {

    tiger := &Tiger{"东北虎", "其它野兽", "虎翔", 1024}

    var animal Animal
    var fighter Fighter
    var beast Beast

    //老虎既是动物,又是斗士,又是野兽
    //用子类实现去给父类接口赋值
    animal = tiger
    fighter = tiger
    beast = tiger

    //调用父类接口方法
    animal.Eat("食物")
    animal.Die()
    fighter.Attack()
    fighter.Defend()
    beast.Run()
}

猜你喜欢

转载自blog.csdn.net/super_lixiang/article/details/82660617