Golang 实现接口

阿福德 · · 1907 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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中的多态。

欢迎大家一起交流。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:阿福德

查看原文:Golang 实现接口

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1907 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传