2.5 面向物件5:介面的繼承
阿新 • • 發佈:2018-12-09
定義兩個父類介面
//定義動物介面:所有動物都會新陳代謝,都會掛掉
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()
}