面向对象编程三大特征4

半世苍凉 提交于 2019-11-28 16:26:32

接口(interface)

按顺序,我们应该讲解多态,但是在讲解多态前,我们需要讲解接口(interface) ,因为在Golang中 多态特性主要是通过接口来体现的。

接口快速入门:

这样的设计需求在Golang编程中也是会大量存在的,我曾经说过,一个程序就是一个世界,在现实世界存在的情况,在程序中也会出现。我们用程序来模拟一下前面的应用场景。

案例:

package main
import (
  "fmt"
)

//声明一个接口
type Usb interface {
  //声明了两个没有实现的方法
  Start()
  Stop()
}

type Phone struct {

}

//让Phone 实现 Usb接口的方法
func (p Phone) Start() {
  fmt.Println("手机开始工作...")
}

func (p Phone) Stop() {
  fmt.Println("手机停止工作...")
}

type Camera struct {

}

//让camera 实现了Usb接口的方法
func (c Camera) Start() {
  fmt.Println("相机开始工作...")
}

func (c Camera) Stop() {
  fmt.Println("相机停止工作...")
}

//计算机
type Computer struct {

}

//编写一个方法Working 这个方法接收Usb接口类型的变量
//只要是实现了 Usb接口 (所谓实现Usb接口就是指实现了Usb接口声明的所有方法)
func (c Computer) Working(usb Usb) { //usb 变量会根据传入的实参,来判断到底是Phone,还是Camera
  //通过usb接口变量来调用Start和Stop方法
  usb.Start()
  usb.Stop()
}

func main() {
  //测试
  //先创建结构体变量
  computer := Computer{}
  phone := Phone{}
  camera := Camera{}

  //关键点
  computer.Working(phone)
  computer.Working(camera)
}

说明: 上面的代码就是一个接口编程的快速入门案例

Go接口特点和语法说明:

基本介绍:

  interface 类型可以定义一组方法,但是这些不需要实现。并且interface 不能包含任何变量。到某个自定义类型(比如结构体Phone) 要使用的时候,在根据具体情况把这些方法写出来。

 

基本语法:

type 接口名 interface {

  method1(参数列表) 返回值列表
  method2(参数列表) 返回值列表
  ...
}

实现接口所有方法:

func (t 自定义类型) method1(参数列表) 返回值列表 {
  //方法实现
}

func (t 自定义类型) method2(参数列表) 返回值列表 {
  //方法实现
}
//...

 

小结说明:

1)接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。

2)Golang中的接口,不需要显式的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,Golang中没有implement这样的关键字


接口的应用场景介绍:

对初学者来说,理解接口的概念不算太难,难的是不知道什么时候使用接口,下面我例举几个应用场景:

1.说现在美国要制造轰炸机,武装直升机,专家只需把飞机需要的功能/规格定下来即可,然后让别的人具体实现就可。

2.说现在有一个项目经理,管理三个程序员,开发一个软件,为了控制和管理软件,项目经理可以定义一些接口,然后由程序员具体实现。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!