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面向对象编程—接口的主要内容,如果未能解决你的问题,请参考以下文章