Golang——接口、多态、接口继承与转换、空接口、类型断言
- 接口是一种规范与标准,只是规定了要做哪些事情。但是具体怎么做,是实现接口的类去做的,接口只是把所有具有共性的方法定义在一起。
- 接口存在的意义就是
用来定义规范,用来做功能的拓展
- 接口最大的好处是可以实现多态
- 在Golang中只要接口中的方法和结构体重的一样,就会认为这么结构体实现了这个接口的方法
- 在这里还是要吐槽一下,Go的语法是真的丑,如果你是Java转过来的,就会发现,垃圾的一批
接口定义及调用:
定义格式:
tepe 接口名 interface{方法 返回值类型
}
调用格式1:
对象名.方法名
调用格式2:这种方式必须实现接口中声明的所有方法
通过接口变量调用
演示:
func main() {// 对象名.方法名var stu Studentstu.Hello() // Student类实现了接口的Hello方法var tea Teachertea.Hello() // Teacher类实现了接口的Hello方法// 通过接口变量调用,如果接口中有两个方法,但是只实现了一个,就会报错,必须全部实现var testInterface TestInterfacetestInterface = &stutestInterface.Hello() // Student类实现了接口的Hello方法testInterface = &teatestInterface.Hello() // Teacher类实现了接口的Hello方法
}type Student struct{}type Teacher struct{}type TestInterface interface {Hello()
}func (student *Student) Hello() {fmt.Println("Student类实现了接口的Hello方法")
}func (teacher *Teacher) Hello() {fmt.Println("Teacher类实现了接口的Hello方法")
}
多态:
- 多态是指同一行为,具有多个不同表现形式
- 多态是一同一个接口,使用不同的实例执行不同的操作
- 多态是除封装、继承之后面向对象的第三大特征。
- 多态是出现在接口关系中的(只能是接口)
- 举例:win电脑和Mac都是电脑(接口),但是mac只能办公用,win可以办公可以玩游戏,不同类型的电脑具有不同的特征,就是多态
多态的实现:
func 函数名 (参数 接口类型){}
演示:
func main() {var stu Studentvar tea Teacher// 多态Polymorphic(&stu) //Student类实现了接口的Hello方法Polymorphic(&tea) // Teacher类实现了接口的Hello方法
}type Student struct{}type Teacher struct{}type TestInterface interface {Hello()
}func (student *Student) Hello() {fmt.Println("Student类实现了接口的Hello方法")
}func (teacher *Teacher) Hello() {fmt.Println("Teacher类实现了接口的Hello方法")
}func Polymorphic(polymorphic TestInterface) {polymorphic.Hello()
}
接口的继承与转换:
接口的继承和普通继承是一样的,直接写接口名就可以了
演示:
func main() {var stu Studentvar test02 TestInterface02test02 = &stutest02.Hello()test02.HelloHello() // 可以调用所继承接口中的方法var test TestInterfacetest = test02test.Hello()
}type Student struct{}type Teacher struct{}type TestInterface interface {Hello()
}type TestInterface02 interface {TestInterface // 继承第一个接口HelloHello()
}func (student *Student) Hello() {fmt.Println("Hello")
}func (student *Student) HelloHello() {fmt.Println("HelloHello")
}
空接口定义及使用:
空接口(interface {})不包含任何的方法,正因为如此,所有的类型都实现了空接口,因此空接口可以存储任意类型的数值
演示:
func main() {// 定义空接口的切片,由于是空接口所以可以存储任意类型的数据var s []interface{}s = append(s, 1, 2, 3, "字符串", 1.1, true)fmt.Println(s)
}
类型断言:
通过类型断言,可以判断空接口中存储的数据类型
定义格式:
value,ok:=m.(T)
- value:表示变量m的值
- ok:表示布尔类型变量,如果断言成功为true,否则为false
- m:表示空接口类型的变量
- T:表示断言的类型
- 如果m
演示:
func main() {var i interface{}i = 123// 如果i是int类型就会把结果赋值给ok,把数据(123)赋值给valuevalue, ok := i.(int)// 如果是123就会打印断言成功,不是123就会打印断言失败if ok {fmt.Println("断言成功:", value)} else {fmt.Println("断言失败")}
}
Golang——接口、多态、接口继承与转换、空接口、类型断言相关推荐
- C# 类实现接口(Interface) 多态 多继承
什么是接口 接口在程序中起到规范代码的作用,例如:电脑的USB接口,这些都是已经定义好的了,制造鼠标键盘U盘等厂家就按这种规格做出来的成品在任何电脑上都可以直接使用,而不需要进行适配,这就是规范的使用 ...
- java接口和多态应用例题_Java基础进阶 第四天 抽象接口多态
今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为: 猫的行为:抓老鼠:吃鱼 ...
- 黑马毕向东Java课程笔记(day07):面向对象(第三部分)继承+抽象类+模板方法设计模式+接口+final+继承补充(就业班)
在这一部分中,我们将讲解有关继承的相关内容,包括继承的概述.继承的特点.super关键字.函数覆盖.子类的实例化过程.final关键字这几个部分的内容. 1.继承的概述以及特点 1.1.概述 ...
- java接口多态的变量能_「JAVA」多态的灵魂,面向接口的程序设计,这才是你该懂得的接口(interface)...
Java面向对象之接口--interface 什么是接口 一般计算机中的接口分为硬件接口和软件接口. 硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议. 软件接 ...
- java学习第八天继承,抽象类,接口
日期:2019年11月13日 1.子父类中的构造函数的特点: 在子类构造对象时发现,访问子类构造函数时,父类构造函数也运行了.为啥? 答:在子类的构造函数中第一行默认的隐式语句,super(); ** ...
- java接口中多继承的问题
java中支撑多继承吗? 支持->接口啊 为什么接口支持多继承呢?因为接口中没有方法体!即使可能两个接口中有一样的抽象方法,但是 只会调用子类中覆盖该同样抽象方法的具体方法!不会引起调用的歧义! ...
- 七:Java之封装、抽象、多态和继承
本文章介绍了关于Java中的面向对象封装.抽象.继承.多态特点 Java面向对象主要有四大特性:封装.抽象.继承和多态. 一.封装 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的总体, ...
- GoLang之interface底层系列二(类型断言)
文章目录 GoLang之interface底层系列二(类型断言) 1.抽象类型.具体类型 2.断言的作用类型与目标类型 3.空接口.(具体类型) 4.非空接口.(具体类型) 5.空接口.(非空接口) ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
最新文章
- mapreduce工作流程
- js ajax 跨域问题 解决方案
- 解决Eclipse安装Genymotion插件后抛异常的Bug
- 2012-04-26 16:08 Director installer fails with error Unable to run run-cds-tool script“
- 1Android系统移植与驱动开发概述
- 移动端,fixed bottom问题
- NOIP2013普及组 车站分级
- 【测试理论基础】史上最强边界值用例设计与实践经验分享
- 安装 VS 2015 报错 kb2999226
- ibus输入法中添加五笔98输入法
- rms 公式 有效值_真有效值RMS定义及推导
- 干货分享——CAD动态块
- (1366, Incorrect string value: '\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...' for column '
- AWS EC2主机类型的区别和联系
- volatility取证
- R语言计算回归模型R方(R-Squared)实战
- PHP是世界上最好语言吗?
- SDRAM学习(一)——初始化
- 安装golang出现 Hey! The program ‘go‘ is currently not installed. You can install it by typing...
- 如何用javaweb实现网上招聘系统、基于SSM+mysql的校园大学生兼职招聘平台
热门文章
- php完美导出word,PHP使用phpword生成word文档
- linux判断改行符_Linux判断符如何使用?
- android手机rom简单制作教程,【图片】ROM助手:任意安卓机型的ROM制作教程【a298t吧】_百度贴吧...
- Java 删除集合中指定的元素
- execl执行linux命令,execl执行Linux命令
- 计算机设计大赛国奖作品_2. 报名材料
- 课程设计:基于SQL Server的银行ATM 存取款机系统设计与实现
- python函数手册中文_Python中文手册-Python函数
- 软件开发报价模板_定制开发小程序和行业通用(模板)小程序的利弊分析
- 佳能g2800清零软件天空_可能是史上最有趣的3D建模软件