博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go面向对象之接口
阅读量:5052 次
发布时间:2019-06-12

本文共 1556 字,大约阅读时间需要 5 分钟。

一:接口的定义

interface类型可以定义一组方法,但这些方法不需要实现。且interface不能包含任何字段,某个自定义类型(如结构体),需要用到时再具体实现该方法。

二:简单使用举例

package mainimport (	"fmt")type itf interface{	SayHello()	Plud(num1 int, num2 int) int}type Personal struct{}func (p Personal) SayHello() {	fmt.Println("hello world!")}func (p Personal) Plud(num1 int, num2 int) int{	return num1 + num2}func main() {	var p Personal	p.SayHello()	res := p.Plud(1, 2)	fmt.Println(res)}结果[ `go run interface.go` | done ]	hello world!	3

 三:接口使用细节

①:接口本身不可以创建示例,但可以指向一个实现该接口方法的自定义的类型(如结构体)

func main() {	var p Personal	var pp Itf = p	pp.SayHello()}

 ②:接口中的所有方法都没没有结构体;

③:一个自定义类型需要将接口的所有方法都实现,我们就会说该自定义类型实现了该接口;

④:一个自定义类型只有实现了某个接口,才能将该自定义类型的实例赋给接口(与③结合起来);

⑤:只要是自定义类型就可以实现接口,而不单单是结构体。

package mainimport (	"fmt")type Itf interface{	Say()}type inter intfunc (i inter) Say() {	fmt.Printf("这是数字%v",i)}func main() {	var i inter = 1	var ii Itf = i	ii.Say()}结果[ `go run interface.go` | done ]	这是数字1

⑥:一个自定义类型可以实现多个接口

package mainimport (	"fmt")type A interface{	Say()}type B interface{	Plud()}type C struct{}func (a C) Say() {	fmt.Println("hello world!")}func (b C) Plud() {	fmt.Println(1+1)}func main() {	var c C	var a A = c	a.Say()	var b B = c	b.Plud()}结果[ `go run interface.go` | done ]	hello world!	2

⑦:接口中不能有任何变量

⑧:接口也可以继承,只不过需要把所有继承的方法都要实现(包括本身的方法)

⑨:空接口interface{}可以接受任何数据类型.

func main() {	var test interface{}	test = 10	fmt.Println(test)	test = "louis"	fmt.Println(test)}结果[ `go run interface.go` | done ]	10	louis

⑩:interface默认为指针类型。

备注:如果要调用接口方法,则接口里的方法必须全部实现,无论该方法是否会被使用,否则报错。

转载于:https://www.cnblogs.com/louis181214/p/10263432.html

你可能感兴趣的文章
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
吴裕雄 python 机器学习——数据预处理嵌入式特征选择
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>