golang面向对象编程—接口

Posted Casey321

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang面向对象编程—接口相关的知识,希望对你有一定的参考价值。

接口

基本介绍

在Go语言中接口(interface)是一种类型,一种抽象的类型。

interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。

在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接口类型的变量

func (c Computer) Working(usb Usb)
	//通过usb接口变量来调用Start和Stop方法
	usb.Start()
	usb.Stop()


func main()  
	computer := Computer
	phone := Phone
	camera := Camera

	computer.Working(phone)
	computer.Working(camera)

运行结果:

基本语法

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

type 接口名 interface
    method1(参数列表) 返回值列表
    method2(参数列表) 返回值列表

说明:

  • 接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想。
  • Golang中的接口,不需要显示的实现。只要有一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口。Golang中没有implement这样的关键字。

接口使用注意事项

  • 接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)
package main

import(
	"fmt"
)

type AInterface interface
	Say()

type stu struct
	name string

func (s stu)Say()
	fmt.Println("stu Say()...")

func main()
	var s stu
	var a AInterface = s
	a.Say()

  • 接口中所有方法都没有方法体,即都是没有实现的方法。
  • 在Golang中,一个自定义类型需要将某个接口的所有方法都实现,我们说这个自定义类型实现了该接口。
  • 一个自定义类型只有实现了某个接口,才能将该自定义类型的实例赋给接口类型。
  • 只要是自定义数据类型,就可以是实现接口,不仅仅是结构体类型。
package main

import(
	"fmt"
)

type AInterface interface
	Say()

func (i integer)Say()
	fmt.Println("integer Say()...")


type integer int
func main()
	var i integer
	var a AInterface = i
	a.Say()

运行结果:

  • 一个自定义类型可以实现多个接口。

  • golang接口中不能有任何边变量。

  • interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么会输出nil.

  • 空接口interface没有任何方法,所以所有类型都实现了空接口,我们可以把任何一个变量赋给空接口。

package main
import(
	"fmt"
)
type T interface
	

func main()
	var i int = 100
	var t T = i
	fmt.Println(t)

博主首页链接:https://blog.csdn.net/weixin_44736475
原创不易,希望大家多多支持
如果文章对你有帮助,记得一键三连哦!❤️❤️❤️

以上是关于golang面向对象编程—接口的主要内容,如果未能解决你的问题,请参考以下文章

Golang-面向对象编程三大特性-多态

Golang 面向对象编程

golang中接口继承

[Golang]面向对象营养餐,一文管够(封装,继承,多态)

Golang学习+深入-面向“对象“编程

golang 面向对象特性