1. 程式人生 > >2.5 面向物件5:介面的繼承

2.5 面向物件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()
}