接口定义
面向对象世界中的接口一般定义是“接口定义对象的行为”,它表示让制定个对象应该做什么,实现这种行为的方法(实现细节)是针对对象的。
在Go中,接口是一组方法签名,当类型为接口中对的所有方法提供定义时,它被称为实现接口,它与oop非常相似。接口指定了类型应该具有的方法,类型决定了如何实现这些 方法
它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口,接口定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了该接口。
接口的的定义语法
//定义接口
type interface_name interface {
method_name1 [return_type]
method_name2 [return_type]
}
//定义结构体
type struct_name struct{
/* variables*/
}
//接口实现方法
func (struct_name_variable struct_name) method_name1() [return_type]{
/*方法实现*/
}
package main
import "fmt"
func main(){
/*
接口:interface
在go语言中,接口是一组方法签名
当某个类型为整个接口中的所有方法提供了方法的实现,它被称为实现接口
go语言中,接口和类型的实现关系,是非嵌入式
1.当需要接口类型的对象时,可以使用任意实现类对象代替
2.接口对象不能访问实现类中的属性
*/
//创建Mouse类型
m1 := Mouse{"罗技小红"}
fmt.Println(m1.name)
//创建FlashDisk
f1 := FlashDisk{"闪迪64G"}
fmt.Println(f1.name)
testInterface(m1)
var usb USB
usb = m1
usb.start()
usb.end()
}
//定义接口
type USB interface {
start() //USB设备开始工作
end() //USB设备结束工作
}
//2.实现类
type Mouse struct {
name string
}
type FlashDisk struct {
name string
}
func (m Mouse) start(){
fmt.Println(m.name,"鼠标,准备就绪,可以开始工作了,点点点。。。")
}
func (m Mouse) end(){
fmt.Println(m.name,"结束工作,可以安全退出。。。")
}
func (f FlashDisk) start(){
fmt.Println(f.name,"准备开始工作了,可以进行数据的存储。。。")
}
func (f FlashDisk) end(){
fmt.Println(f.name,"可以弹出。。。")
}
//测试方法
func testInterface(usb USB){
usb.start()
usb.end()
}
//结果
罗技小红
闪迪64G
罗技小红 鼠标,准备就绪,可以开始工作了,点点点。。。
罗技小红 结束工作,可以安全退出。。。
image.png
多态
概念:一个事务的多种形态
go语言通过接口模拟多态
就一个接口的实现:
1. 看成实现本身的类型,能够访问实现类中的属性和方法
2. 看成是对应的接口类型,那就只能访问接口中的方法
接口的用法
- 一个函数如果接受接口类型作为参数,那么实际上可以传入该接口的任意实现类型对象作为参数。
- 定义一个类型为接口类型,实际上可以赋值为任意实现类的对象
网友评论