Duck Typing
golang的接口很有意思,与java的思路不一样,java中是申明是的,必须使用关键字implements。而golang中则用的是Duck-Like的模式,如果子类的行为与接口一致,则这个子类就实现了该接口。如果某个东西的行为和鸭子一样,那么我们就说这个是一个只鸭子。
Java接口
interface AInterface{
void behavior();
}
class ConcreteClass implements AInterface {
void behavior();
}
上面的例子就是Java的中实现接口, 必须使用implements 关键字。
Golang 接口
type Car interface {
Drive()
}
type EVCard struct {
color string
}
func (c *EVCard) Drive() {
fmt.Println("EVCar Drive");
}
上面的代码是实现了接口, 可以看到EvCard 这个struct没有使用任何的关键字,只不过接口上有一个Driver()方法,结构体上也有这个Driver()名字一样的方法而已。
实际举例
package main
import "fmt"
type Car interface {
Drive()
Wash()
GetColor()
}
type EVCard struct {
color string
}
func (c *EVCard) Drive() {
fmt.Println("EVCar Drive");
}
func (c *EVCard) Wash() {
fmt.Println("Wash EvCar");
}
func (c *EVCard) GetColor() {
fmt.Println(c.color);
}
type Person struct {
car Car
}
func main() {
person := &Person{
car:&EVCard{
color:"White",
},
}
person.car.Drive()
person.car.Wash()
person.car.GetColor()
}
上面的这个例子很好的演示了golang中的多态。
欢迎大家一起交流。