繼承and多型範例 - skynocover/Wiki-for-GoLang GitHub Wiki
繼承及多型
package main
import (
"fmt"
)
type animal interface {
eat() //定義interface只要會吃就是動物
}
type person struct {
name string
food string
}
func (p *person) eat() { //完成animal interface 接口設定, person屬於animal
fmt.Println("i like to eat " + p.food)
}
func (p *person) talk() {
fmt.Println("my name is " + p.name)
}
type men struct {
person //men 繼承person
}
func (m *men) talk() { //override talk
fmt.Println("i am a man, my name is " + m.name)
}
type women struct {
person //women繼承person
}
func (w *women) eat() { //oeverride eat
fmt.Println("i like to eat " + w.food + " and drink coffee")
}
type cat struct {
food string
}
func (c *cat) eat() { //完成animal interface 接口設定, cat屬於animal
fmt.Println("i don't like mouse, i like to eat " + c.food)
}
func say(a animal) { //型態是animal,可以傳入person或cat
a.eat()
}
func main() {
p := person{"Bob", "meat"}
w := women{person{"Ann", "cake"}}
m:=men{}
m.name="Tim"
m.food = "meat"
c := cat{food:"fish"}
p.talk()
w.talk()
m.talk()
say(&p)
say(&w)
say(&m)
say(&c)
}
/*
my name is Bob
my name is Ann
i am a man, my name is Tim
i like to eat meat
i like to eat cake and drink coffee
i like to eat
i don't like mouse, i like to eat fish
*/