00:00
好,我们接着来看一下接口的注意事项和它的细节说明,那这里呢,我一共总结了有十个细节,还有这个注意事项,那么我们分成两个部分来讲解,我们先来看第一部分,接口本身是不能创建实例的。也也就是说接口它本身不能对应一个变量。就你不能创建一个,呃,直接用接口来创建一个变量,那我给大家举个例子,还以这个为例,大家看这呃,我就干脆新建一个文件吧,不然的话都在一个地方就不奖了,对吧,我新建一个文件叫还叫interface。Interface什么呢?这个叫注意事项吧,Details。写到这来,然后呢,我们新建一个文件叫面点构。好,前面呢,我们打一个包包过来。这个共有的代码我们粘一份过来,好吧,然后function主函数。专属。好,现在呢,我我假设有个接口,注意听我有个type a接口。
01:03
Inter。Interface,好吧,没没问题吧,这个它的类型就是interface。然后呢,这里边呢,各位同学啊,这里边呢,假设呢,我们有一个方法叫做C。说什么东西啊,好再来一个就就写一个方法就行了,那注意你不能这样去搞一个变量啊,说老师我写一个变量名叫A,它的类型呢,叫这个东西,那同学们看你这样,你这样写了过后,你这样直接写过后呢,其实它这个是一是没有什么东西的,也也就是说实际上这个这个东西呢,必须有一个变量去指向它才行,所以一般来讲呢,我们说接口本身,我们它不能不能创建一个接口,但是呢,它可以指向一个实现了该接口。的自定义类型的变量,那这个怎么理解呢?比如说我举个例子。你看你你像这样子去,你直接调这个C,你肯定是调不起来的。你这样去用,你看你看保存一下。你看直接就给你啊这个地方啊对。
02:01
你像这样写,你看会有什么后果,你看。好,我们来运行一下看CD。点点CD到我们的这个叫做detail。诶,呃,叫做这个接口的details。Tate。对吧,然后呢,我们呃,Go wrong一下may.go我们看看这边会提示什么信息,大家可以看到这一个报错了。报错了,他是什么呀?无效的一个例子,呃,是个空指针,那也就是说你你你直接去用这个接口完了去调,它肯定是起不来的,为什么?因为这个方法都没实现过吗。那你要用它会怎么用才可以呢?它是这样子的,就说你一定要用的话,它是它自己不能实例,但是呢,它可以指向一个实现了该接口的自定义类型的变量,那我举个例子,比方说我这里有一个结构体叫student。Ru。OK,那这个结构体呢,它有,它有一个字段名叫name。
03:02
好吧,十寸。然后呢,我让这个student来实现这个接口,这个没毛病。好,我们写一个STU,然后STU对不对,然后呢,我把这个方法写进去。注意听啊C,然后呢,我们很简单说出一句话。说出一句什么样的话呢?我们就这样写,就是说。就是C啊,就是我们写这个里面的一个C方法写完了,那这个时候呢,他可以这么玩,比如说我先去创建一个student的这个对象实例啊,Student这个结构体的变量,对吧。那这个就没没毛病的,然后呢,我把它付给他,这个是可以的。啊,这个时候就可以调用起来了,你看它是一个接口。哎,这地方我们写错了吗?是这儿没打开对吧。你看。这个是一个结构体变量。
04:02
结构体变量,而且它实现了什么?他实现了,他实现了这个C方法。既然他实现这个C方法,它就实现了谁,他就实现了这个接口,对吧,也就是说他实现了。实现了这个接口,那于是乎我把这个变量交给他是可以的。是可以成功的,然后呢,再通过A去掉,好,这个时候呢,他就把student里面的这个C方法调起来了,我们来跑一下运行,请看效果。我们发现没问题,但是有一点哦,如果说你没有实现这个方法,那是不可以给的,比如说我把这个注销了,我把这个注销,你看这样给他就会报错。他马上报错,看这里怎么说啊,他说cannot use sto这个类型作为type interface,然后呢,给他一个assignment,就是分配,为什么呢?他说sto这个类型does not,就是没有implement,不,没有实现这个A接口,看到没有?所以说我们说这个这个特点大家要要注意一下啊,要注意一下,好,我把这个特点给大家整理到笔记里边去。
05:06
大家体验一下。哎,我我把这个笔记放一下啊,注意事项我们一个个来说。那有些注意事项呢,老师已经提过的,那我就快速的给他过一下就可可以了,好吧,他也不难。注意事项第一点。借口。第二点。接口呢,就是我们讲到这里面啊,接口它本身不能实例化,就是说它本身不能直接去创建一个所谓的接口的这种,呃,这种数据类型的变量没有,因为它方法。方法是需要别的自定类型来实现的,但是呢,它可以指向,这点很重要啊,可以指向一个实现了该接口的自定义类型的变量,这一点请大家一定要注意。哦,它可以指向一个实现了该接口的自定义类型的变量,大家注意一下,那问题来了,说说老师,那那我我把这个案例也放过来,大家体验一下。
06:04
主要体现在哪里呢?主要体现在这句话,那句话第一个,那就是我这有个to,同时呢,我把它给了他。但前提是sto怎么样。SQ这个变量对应的这个类型,它实现了C方法。那你这个C方法实现了,就实现了这个A接口,对吧,A interface接口啊,这一点大家注意一下,把它放这没问题吧,也比较简单。那么我们再看第二点。第二点,他说接口中所有的方法都没有方法体及都是没有时间的方法,这一点在前面我们已经讲过了,这里就不再多说,好吧,不多说了,因为前面我已经提到这个。第三个特点来看,第三个接口的注意事项呢,是在勾勒中,一个自定义类型需要将某个接口所有方法实现,我们才说自定义类型实现了这个接口,那前面是不是已经讲过这个事了,就说假设我们这个接口,接口里面有两个方法,你只实现了一个方法,那对不起,那也不叫实现了这个接口。
07:04
明白好缺一不可啊,就是每一个都要实现第四一点,第41.1个自定义接口。我写到这来了。就是说一个自定义接口只有实现了某个接口。啊,某某个接口才能将自定义类型的实例赋给这个接口类型,好,这个其实就是前面第一句话,这个我就不知道为什么多写了一次啊,这个第四句,第四一个注意事项,就是第一个那已经说过的,不知道为什么在这再体现了,不用管它,还有第五一点比较重要,第五一点呢,经常作为一个面试体,他说只要是自定义数据类型都可以实现接口,而不仅仅是结构体类型,我们前面呢,都是用结构体这种类型来实现接口的,但是实际上。呃,它不一定是结构体,那我给大家举个例子,打个比方,同学们看。我这里呢,有一个type。哦,我叫integer。
08:02
那么int大家看,也就是说我自定义了一个类型叫integ,它呢是int这个类型的,那你看啊,我也可以对他来实现这个接口,你看我这样写。范可追星奖,好,那我写到这了。那我写个爱。TIgEr。好ineg,然后呢,我要使用这个C方法。把C方法实现,写一句话。PRT。好,我写一个叫做。的这个C方法,好,我把这个I打印出来。看打印出来,那也就是说此时此刻这个ineg ineg这个类型变量也就实现了这个接口,那怎么体现呢?大家看我这样写一个啊,比如说我定义的一个变量。Vri是integer,那么它是一,就直接给他一个十。
09:00
看到没有?给他一个十,那我这个时候也可以把它付给一个接口,你比如说。大家看啊,我写一个接口叫B。好B,那么我把谁付给他呢?我把这个I付给他,这也可以。因为你为什么可以,因为你这个I对应的类型叫intake intake呢,又实现了C方法,那就间接的实现了这个A这个接口,对吧,那我这个时候来通过B来调用这个C方法也是成功的,那大家想一想,实时时刻这个BC方法应该输出什么信息?是不是他就应该输出。Inte CI等于十。是不是也也就是说我们这个普通的不是结构体的这种自定义,自定义类型,其实呢,也可以实现这个接口,也可以实现这个A接口,只要我把它的方法实现了,我就实现这个接口,大家看是不是我把这个呃I付给了。A,接口的这一个变量是吧,我们来运行一下看效果。
10:02
跑一下我们发现没问题,大家看这里。是不是integ c。I等于十,说明它是没有问题的,它也可以这么去用,能理解吧。在这个细节大家注意一下啊,因为后边呢,有些程序员他会在这这个地方,呃,针对某一个自定义的非结构体的这种类型呢,也给他实现接口,大家体验一下,好,那我把这个核心代码给大家写一下。核心代码一部分是这儿。是吧,一部分是这个位置。把它放这儿来。放这里,然后呢。然后我们再把下面代码也拉过来。下面的代码是在这。这个地方我们用了一下。好,保存到我们的笔记里边去。没问题吧?这个是使用好,那么关于我们就是呃结构体呃就是接口的注意事项的第一部分呢,就给大家先说到这里,后面还有十个点,我们放到下一个视频为大家讲解。
我来说两句