1 概念与实现
- 声明接口
package interface_demo
// interface for behavior
type Behavior interface {
Run() string
Eat() string
}
- 如何实现接口
type Animal struct {
Color string // 属性
}
// 定义Dog结构体
type Dog struct {
Animal // Dog包含Animal的所有属性和方法
ID int // 属性
Name string
Age float32
}
func (d *Animal) Eat() string {
fmt.Println("yummy yummy!")
return "yummy yummy!"
}
func (d *Dog) Run() string {
fmt.Println("ID:", d.ID, " Dog is running")
return "Dog is running"
}
加interface即可定义接口
接口的实现为隐式实现,不用像java一样去继承,只要方法名,入参,返回值相同即可。这未免太随意了。
2 多态
- 面向对象特征:多态
接口
package interface_demo
// interface for behavior
type Behavior interface {
Run() string
Eat() string
}
多种实现
type Animal struct {
Color string // 属性
}
// 定义Dog结构体
type Dog struct {
Animal // Dog包含Animal的所有属性和方法
ID int // 属性
Name string
Age float32
}
type Cat struct {
Animal
ID int
Name string
Age float32
}
func (d *Dog) Eat() string {
fmt.Println("yummy yummy!")
return "yummy yummy!"
}
func (d *Dog) Run() string {
fmt.Println("ID:", d.ID, " Dog is running")
return "Dog is running"
}
// method of cat
func (c *Cat) Eat() string {
fmt.Println("Cat -> yummy yummy!")
return "Cat -> yummy yummy!"
}
// method of cat
func (c *Cat) Run() string {
fmt.Println("ID:", c.ID, " Cat is running")
return "Cat is running"
}
- 接口定义变量
func main() {
// 测试接口定义变量
var b interface_demo.Behavior
b = new(struct_demo.Dog)
b.Run()
dog := new(struct_demo.Dog)
cat := new(struct_demo.Cat)
action(dog)
action(cat)
}
// 测试接口定义变量
func action(b interface_demo.Behavior) string {
b.Run()
b.Eat()
return ""
}
log
ID: 0 Dog is running
ID: 0 Dog is running
yummy yummy!
ID: 0 Cat is running
Cat -> yummy yummy!
3 总结
怎么定义接口?
interface声明
怎么实现接口?
不需要显示的实现,go语言为隐式实现
要求,如果实现接口,那么就必须实现接口的所有方法,同时要求入参出参一致。