00:00
呃,我们来看一下接口的,就是系统的介绍一下接口的,呃,这个概念和它的基本语法OK。那么interface这个类型呢,就是接口类型,这点大家确认一下啊,就是说接口里面可以定义或者叫声明易主方法,这些都是不需要实现的,也就是说我们这个接口里面的方法呢,都不要去实现,这点大家注意一下,并且interface不能包含任何变量,这点大家记住啊,呃,我们在学过其他编程语言里面呢,接口是可以有变量的,或者叫常量。但是呢,在我们这一个,呃,就是勾浪里面的接口,它是不允许有任何变量的,不管什么变量都不能有。这点大家请注意一下,那么到到某个自定义类型,比如说结构体form需要使用的时候,再根据具体情况把这些方法写出来,呃,这个写出来我们就叫实现这个方法,能能理解这意思吧。就叫实现。这点大家请注意一下啊,就是特别强调一下,没有这个任何变量,第二个呢,这个基本语法我们再来系统的说一下,它的基本语法是这样子,Type接口的名称interface。
01:09
Interface,这是这个type和interface是关键字,那么在这里面呢,你可以定义很多的方法,或者叫生命很多方法method,这个方法名参数列表,返回值列表,然后呢,这方法名参数列表,返回值列表里面点点点,那也就说在这个接口里面,你这个方法可以是多个的,比如说我们在前面这个USB,我们是不是就定义了两个接口,一个star,啊,定义了两生命了两个方法,一个是star,一个是stop,但是呢,我们这个方法特别简单,没有没有行参,也没有返回值,对不对,好,这就是可以写多个,那么什么叫什么叫做实现的接口呢?注意,所以实现接口有两层含义,第一个呢,就是把这个方法具体的这个内容写出来,第二个实现接口还要包含一个东西,叫所有方法,就说你不能说我。
02:02
我只把这个接口里面的这一个方法给他写出来了,我就认为是实现这个接口了,这是不对的。他是把所有把这个接口里面所有的方法都实现了,那么我们才叫实现了这个接口,比如说这边看啊。Function自定义类型,这个自定类型可以是任意的,比如说前面我们的for,也可以是camera。就自定义类型呢,完全是你自己定义的啊,就说这个自定义类,就说A自定自A自定义类这个类型可以去实现这个接口,那么B这个自定义接口类型的也可以去实现这个接口,能理解,那么这个是方法名参数,这个后面是一样的啊,就这一部分叫函数的签名,就这部分,老师现在高亮的部分就这部分。叫函数的签名,函数的签名要跟它完全保持一致,完全保持一致不能不一样啊,一定要一样。好,这是基本语法,那么这有几个小节说明接口里所有的方法都不能有方法体,我给大家举个例子,比如说这里。
03:06
你不能给我写一句话说,哎,我来写一点东西在里边,这个就不行。这个就不行,你像这样写的话,他立马给你报错。加没有。你看。马上报错,这是语法出错了,他不,他不期望这边有一个什么逗号什么的,也就是说这个方法是不会有方法体的,这点请大家注意,这是第一点要注意的,第二点接口方法是都是没有实现方法接口体现了程序的一个呃思想,什么程序设计思想呢,叫做高类句低耦合,所以高类句就是它能够把自己的代码呢,全部写到函数里边去,低耦合就说它在这个它这个程序之间呢,它们的耦合性降低了。这点。我给大家举个例子啊,比如说我们以前在参加工作的时候,就遇到这么一个情况。当时呢,我是在用友做,前一段时间在用友,我们刚刚入职的时候呢,做做过三个月的测试。
04:04
在拥有工作时先前期他是要求你做一段时间的测试,然后再去做开发。OK,当时呢,就遇到这么一个情况,就是你去发现一个错误过后说发现了一个bug。你发现一个bug呢,你把这个程序A程序员找过来说,诶诶小A你看你这个程序有问题。那小A呢,回去检查了一下,他就跟告诉你,他说啊,对不起。这个错真的不是我的错。因为我是调的调用了B,他写的写的一段代码,写的一个函数,结果呢是他的错。所以说这个程序错误了,你要去找那个B程序员,于是乎呢,测试人员就去找BB呢,说哎呀,真的,我回去检查了一下,真的也不是我的错,为什么呢?因为我调了C程序员写的一段代码,呃,写了一个函数,结果是他的问题,你找到CC又说什么呢?真的不是我的错,因为我调用了A程序员写的一个函数,你看这样就形成了一个循环,就说这种代码呢,是特别不希望在实际开发中出现的,就说你找不到这种东西,因为在我们实实际开发中,我们尽量需要什么呢?你的代码错误就出现在你本身写的这段代码里面去,不要去波及到无辜,你比如说以前我们最早参加工作的时候,甚至有些程序员,他在一个函数里边开辟了一段内存。
05:25
啊,他在他在程序里面开了一段内存。啊,然后他把这个指针传到另外一个函数里边去,然后他在一个函数里面开了一个内存,然后把这个指向这个内存的地址呢,传到另外一个函数,它在这个函数里面把这个内存给free掉。你想,这多可怕。这个就叫耦合性很强。因为你在这开的内存,原则是说你用完了就自己把它free掉,结果呢,有些程序员在这函数里面开了内存,他把这个只能传给下一个函数,让别人函数去free,那别的函,别的人可能不太知道你这有块内存没有没有释放,对吧,所以这个就叫什么呢?这个耦合性就很强,这种代码就很垃圾。
06:07
啊,所以说我们这个接口的出现呢,它可以解决一个高类聚低耦合的问题啊,这个代码就会很好,后面呢,几乎我们在后面用go开发的时候,这个接口无处不在。接口无处不在不在啊。还有一点大家注意,请。那么在go浪的这个接口中呢,它不需要显示的实现这个接口,大家有没有发现,你们有没有发现一个特点,同学们看我们写一个form,我们又写了一个camera,我们去实现这个方法,其实你都没有感觉到你实现这个接口了,为什么?这就好像你在这个构造体,给这个构造体,呃,给这个构造结构,呃,这个结构体写了一个方法而已嘛。你都不知道这个方法是属于USB的,看到没有,它并没有体现出这个方法是属于USB这个接口的,没有体现出来吧。你不像以前我们写一段代码,你看以前我们在Java里边,你写一个类class a implement。
07:06
这点大家看到implement。对吧,实现一个接口,比如说叫这个USB,你看在Java里面,它要明确指定这个类实现了这个接口。对不对,但是你有没有发现在我们的这个勾浪里边,其实他都不知道是去指定哪个接口,他只是说我把这个方法实现了。那你只要把这个方法实现了,那你把这个方法,这个方法实现了过后,那这个结果就实现了,那我问大家一个问题,假设,所以听我讲啊。因为它不需要显示实现,大家没有,它不需要显示实现,只要一个变量含有接口类型中所有方法,那么这个变量就实现了接口。因此在勾浪里面去,其实是没有implement这样的关键字的。那我问大家一个问题,同学们思考假设。我这儿有一个。接口叫USB2。
08:02
他这里面也有这两个方法,我问大家一个问题啊,请问phone。和这个camera,它有没有实现USB2这个接口呢?实际上他也实现了。因为这个。高浪里面它这个实现接口啊,它是基于这个方法的,而不是基于这个接口本身的,你这个接口叫什么名字,其实他并不关心,他只要把这个里面的这个函数,这个方法给你实现了,那么自然就实现这个接口,那也也也就意味着,其实我们这样一定义的话,就意味这个form既实现了USB这个接口又实现了。USB2这个接口。这个在Java里面他是做不到的。知道吧,因为它是什么呢?它是显示时间,它必须指定一个employment。哪个接口?对吧,那就是说你实现哪个接口,你就写哪个接口。那你不可能同时实现两个接口,对不对,OK。
09:01
那我告诉大家一个问题啊,我告诉大家,那我问大家一个问题,假设我这样写了过后,我把这个改成二,大家问问大家一个问题,我的代码能不能跑起来。能不能跑起来?显然我是能跑起来的。运行一下。Go run。呃,为了看到这个效果有变化呢,我把这个改了呢,我故意在这个输出信息里面,呃,做一点手脚啊,比如说相机开始工作,我打一些这个波浪号。大家看一下是不是这样子的main.go跑起来,你们可以看到。同学们可以看到是不是输出了吧,是不是就相当于说我们这个这么一改,就相当于说我们这个phone和camera,连这个连这个USB2接口也实现了。看到没有体会到go浪实验接口的一种特点了没有,其实它是它只它是基于这个方法的。只要你方法是什么就行啊,而且他并不指定我是实现的一个接口啊,只要把方法实现那就实现了,OK,那我再问大家一个问题,假设我这再有一个test。
10:06
我还能跑吗?就代码还能能不能运行起来。大家看我的代码还能不能运行起来,因为你这个us usb2里面有三个有三个方法。但是我只实现了两个方法。我我有没有把这个us usb2的三个方法都实现,请问大家没有吧,既然我没有把这个phone没有把这个三法三个方法都现,我告诉大家你这一方传就传不进去了。他一定会在五十五行或者哪一行给你报错来走一个。跑起来。我们可以看到,他果然报错了,他说。71行和72行有错,他说不能够使用这个phone。跟这个接口传给他,为什么呢?因为你有一个test的方法没有实现。注意啊,这个implement是实现的意思,但是在功能里面,它并不是一个关键字看啊,他说这个这个camera也没有实现这个什么呀,这个方法开始的方法也没实现。
11:03
明白吧,但是但是你要把它改成。二把这个二去掉,诶,他又能跑起来了。那他又能跑起来看,多灵活。因因为为什么呢?因为我这个U,我这USB2连方法我都实现了,看到没有。所以说你看体体会一下这个go浪这个接口编程的一种灵活性啊哦,它的耦合度是真的很低哦不,这个甚至比Java这个这个面向接口编程他还要他还要松散,还要松散。所以说它是基于这个方法的,OK,好,那么我把这个特点呢,给同学们整理到这里面好不好啊,所以我介介介绍了它的基本啊,基本介绍和基本语法,我们整理一下好。板述一下同学们跟上老师思路。好,我把它反述一下走。这儿呢,有个概念的再说明。接口接口概念的再说明。对不对,我再说明一下,给他一个标题三。
12:02
给他一个标题三,OK,然后呢,这边还有一个就是它的基本语法也给大家拿过来。好吧。基本语法也给大家整理到这里,没问题吧,这是它的一个基本语法。啊,它的基本语法呢,老师就在这,就直接把这个呃图截过来好吧。结果来。OK。放到这里了,大家看一下。这个也很明确,然后呢,后面第三部分我们讲什么呢?讲了一下小结说明,针对这个语法呢,我们做了一些说明,对不对,好。做了一些说明,放到这来小结说明。板书一下,好,板书说明我们说了两点,第一个就是这个。我要标一下啊呃,首先呢,大家要知道接口里面所有方法都没有方法提。也就是说所有方法都没实现过,这个体现出这个这个程序设计的多态,它体现出这个多态的特点,同时它还体现出高内聚低耦合的这么一种编程思想。
13:05
能体会啊,然后更那中不需要显示实现,什么叫显示实现呢?就说你没有,你不需要去指定你这个,呃,结构体或者一个变量实现了哪个接口,你不需要去指定,你只需要把它方法实现就行。看到没有,这个这个就是说它不需要显示实现。啊,这点跟很多很多这个oop编程语言它是不一样的。好,这点大家注意,因此呢,这个功里面是没有implement这样的关键词的,因为它不是显示提示实现的啊好,呃,那关于这个接口概念的再说明和基本语法呢,我们就再给大家介绍,这里大家消化一下。
我来说两句