00:00
好的,那么刚刚呢,我们是介绍了一下我们这个,呃,抽象类,那关于抽象类的话,其实它是非趁理解的,它就是一种一种专门用来被其他类所继承的A类,它生下来就是给别人去当这个副类的,而且在抽象类当中,我们可以去添加抽象方法,抽象方法呢,就是说没有方法体的方法,它需要这个子类必须要对它进行一个实现,那其实和我们抽象类类似的的话,还有这么一个东西。叫做什么呢?哎,我们来创建一个新的TS文件,我们零六叫做一个接口,接口这个东西啊,它它不仅仅和抽象类像,它和很多其他的东西呢,诶都有点像啊,咱们先不着急,我先把这个呢,诶这个文件的路径改一下,这个是我们的零六该是我们这个接口。诶点一个GS,那这块什么叫做接口呢?那在说这个接口之前呀,我们先回顾一下我们之前所讲的一个东西,之前我们在讲这个类型声明的时候,我们说了,诶我要想呢,诶我想去,诶描述一个这个对象的这个类型啊描述一个对象的类型我们可以怎么写,哎,我可以写一个,我直接来一个这个type,我们来一个my type,我们生明一个类型等于什么呢?诶等于个这个大块,在这个大块里面我们可以写,哎,Name是一个这个string age是一个这个哎,Number。
01:28
哎,也是一个number,后边我们甚至还可以接着写,还可以写什么呀,还可以写一个这个中号,我们来一个这个,诶proper name,哎,Proper name proper name呢,它的类型是一个string,然后这个类型叫做一个any,这个是我们之前讲过的一个类型,那么我们说它的作用的话,就是去描述啊,我的一个对象当中可以包含哪些属性,当然这个的话我们就不写了,因为写上这个以后就等于是任意属性了,所以有了这个类型以后,我们在创建这个对象的时候,比如说我看一个这个obj冒号,它的类型呢,就可以整一个买type在这儿,我们可以直接写一个,写个什么呢?诶,那我得写呀,内幕有什么什么东西,然后呢,还得有这个age有什么什么东西,这样写上以后是不是就OK了,诶,那这样的话,其实它的作用就是对我们这个对象的类型做了一个这个限制啊,做了一个限制,那我们在这里边,我们除了可以用这种方式去写的话,我们也可以用一个接。
02:28
接口的形式去定义,那接口是干嘛的?接口的概念其实并不难,接口其实就是什么呢?接口就是。哎,用来诶定义一个哎类,诶一个类的一个什么呢?诶一个类的这个结构也就是什么呢?哎,也就是我们这个类中啊,或者是要叫类的结构呢,或者说叫这个对象的结构我们都行,因为类的话也是用来创建对象的啊对象的那这里边我们来定义个接口吧,我直接写一个定义接口的话,跟定义这个类呢很像,也是类是class开头,我们接口的话是interface开头啊interface开头interface后边我们要跟的是一个接口的名,也就是说我可以叫一个哎,My inter,诶face随便写一个啊my interface,然后后边紧跟着一个这个诶大块,那这样的话,诶这个分号就不用写了啊,这样的话,我们实际上就是在定义这么一个哎接口,诶,这个interface少一个R啊,少12INTERFACE就定义好了一个接口,接口里边写的时候呢,我们直接来一个name啊,Name我们来一个string,然后呢,我们这来一个age。
03:37
还一个number,那这样我们就定义好了一个接口,那这个接口的作用什么?诶,这个接口规定了,哎,我要定一个类啊,我规定这个类的结构,这个类的结构呢,里边有两个属性,一个叫name name的类型是string,一个叫age age的类型是number,哎,你会发现这两个东西长得是不是非常非常的像啊,哎,不仅是像,而且我还可以去替换,这是这个my type,我可以直接替换成我这个my interface啊,My interface你看效果是一样的,如果我少了属性。
04:10
他是不是也会给我报错,诶我把这数性加上我写一个是不是也报错啊,诶都写齐了是不是就没问题了,我这多一个多一个什么呢?诶多了一个这个沾这in的样粘,我写一个难。你看你看是不是同样也会报错啊,也会报错,它就这么一个效果,所以在这儿来看的话,我们这个买interface,我们interface接口和我们这个类型这种方式是不是很像啊,哎,很像,所以这个时候呢,接口是用来定一个类的结构,它用来什么呢?诶用来诶定义一个类中,诶应该包含什么呢?哪些属性和方法啊,应该包含哪些属性和方法,那同时什么呢?诶同时我们这个接口啊,它也可以当成什么呢?诶当成我们这个类型声明去使用啊,去使用,那它的效果的话,跟我们这个普通的类型声明的话是非常的什么呢?非常类似的,其他的用法其实都是一样的,那还有哪有不同啊,还有哪有不同,那对于我们这个类型声明来讲啊,我们类型中来讲,我声明一个就只能声明一个,你说我再整一个type。
05:25
哎,我们来一个MY。诶等于一个大块,你看我这再声明一个,它是不是就报错了,因为在这儿的话,我们是等于重复去声明了一个这个类型,但是对于接口来讲,注意了,接口是可以重复声明的,我这写一个interface。Interface,我来一个,我就叫还叫my interface,还叫my interface,然后来一个大块,你看它这是不报错的,甚至说在它的里边,我们去可以加一些别的属性,比如说我加一个GNDR粘我们来一个string string,诶你会发现我这时候是定义了两个接口都叫my interface呀,哎,注意了,这种语法在我们TS里是合理的,那你说老师到底以哪个为准呀?哎,那就是把它们两个加一块儿就准了,也就是我这写了两个,那其实就等于什么呢?我创建了一个接口,一个接口里边有三个属性name age沾,那所以这个时候你看这就报错了,为什么呀?
06:28
是不是少了一个粘啊,所以你要写的时候呢,你后边还得接着写,我来一个这粘,我们写一个什么呢?写一个这个,诶难,那这样我这个诶类这个对象才可以,哎所以的话,接口的话,你完全可以当成是一个类型去使用,所以我们在声明一个对象的一个类型的时候,哎,我们可以用这种,诶我们用这种别名的形式声明一个类型,也可以用什么呢?诶接口两者在这块的话区别不大,但是哪有区别呢?哎区别就在于什么呢?哎,我们接口可以在我们定义类的时候,去限制我们这个类的结构。
07:07
哎,我们这个接口,哎可以在我们这个定义类的时候,哎去什么呢?去限制我们这个类的一个结构,这一点的话,接口什么呢?这一点接口其实有点像什么呢?有点像我们这个抽象类啊,有点像我们这个抽象类,但是这块我们来看一下吧,我们来看一下我们直接还是我定一个interface啊NT。Facebook interface interface的话,我们定一个叫做my int啊随便写一个简单点写,哎,那这里边的话,我们就还是我就定义一个属性name呢,叫一个string,然后的话我们定义一个什么呢?定义一个叫做一个say hello c hello的话,我们返回值是一个word,也没有参数定义这么一个东西,你会发现在这里面S,你会发现在这里面首先我定义这个name,我是没有给它赋值的,我定义的这个c hello,我是没有方法体的,而且你说老师我写个方法体吧,我写个方法体都不行啊,都不行,所以这个时候其实我们说了这个方法,其实这个c hello实际上在我们这个接口里,它就是一个什么呢?抽象方法啊抽象方法,所以这里边注意接口中的诶所有的属性都不能什么呢,都不能有实际的值,诶实际的值也就是接口指什么接口指定。
08:34
同意。哎,只定义我们这个对象的一个结构,而不考虑什么呢?而不考虑我们这个实际值啊,实际值,所以这里边我们接口和这个抽象类啊有点类似,不同点在于抽象类当中可以有抽象方法,诶也可以有实质的实质的方法,也可以有这些真实的属性,但是在接口中,哎,在这个接口中所有的方法它都是什么呢?哎,所有的方法都是我们这个抽象方法啊,所有的方法都设方法,所以你看啊,我这这个name也没有值,这个CR勒也没有值,那它有啥用呢?诶当我们去定义一个类的时候,比如说我定义一个class,我就叫一个麦class,麦class,那我们定义类的时候可以什么呢?
09:24
哎,定义这个类时可以,哎使我们这个类哎去实现一个接口啊,去实现一个接口,怎么实现,实现接口我们继承一个类,我们用的是extend,而我们实现接口我们用的是一个employment,叫做实现,我们直接来一个employments,来一个叫做my interface这个效果就是用我这个类去实现这个接口,什么叫实线接口,实线接口,实线接口就是什么呢?就是使我们这个类满足我们这个接口的一个要求,诶接口什么要求啊,你看我这个买inter啊,不叫买interface,我们这是用的是买inter尔,我这个买inter尔,它要求我里面有一个name属性,还有一个c hello,这个方法,那所谓的让我们类满足它的要求,实际上就要求我们这个类里边也必须得具有这两个东西,一个是内幕属性,还有一个是hello。
10:25
所以你看啊,当我把鼠标放在这儿的时候,你看这给你写了。诶,你看啊,丢失了这个属性什么呀?买in特尔哪个属性啊,Name还有c hello是不是少这东西啊,所以当我们去实现一个接口的时候,我们必须把接口里边的所有属性,还有所有的这个,诶所有的这个方法全都在这里边去实现啊,全都在这里边去实现,那这一块的话,我们直接来一个,其实在这儿它有一个快捷键叫这个,当你去看这个错误信息的时候,它一个快捷键,你看这有一个什么呀,叫做employment o members,你直接一点,诶直接一点出现这玩意儿,你直接一点,OK,它是不是自动就把这东给加上了,诶你也可以手动写,手动写是一样的啊,我们直接来一个name,来一个这个string,然后的话我们来一个say hello say hello的话,在这里边我们可以写一个,先写一个,诶写一个cancel.log大家好。
11:17
大就好,然后的话你会发现这还有问题,还有什么问题啊,就是解别的问题啊,我们这定一个属性,但是属性是不是没有初始化呀,所以我们还得补一个构造函数里边我们来一个name name的值是一个string,我们直接来一个this.name等于一个name,这样就OK了啊这样就OK了,这个类我们就可以正常去使用了,诶那同学会说了,老师,那你这个你这个接口干嘛用的呀?你定义完这个接口以后,似乎我们这个类定义起来是不是更加麻烦了,诶更加麻烦了,我图什么呢?啊图什么呢?那这里边我们就要说到接口这个名字的含义了,什么叫接口,什么叫接口?很简单,我们两个水管子,我们要拧到一起,之间是不是就有一个接口啊?哎,我把往上一拧,是不是拧到一起了,哎,我有一个U盘,我这个U盘我要想在我电脑上用,我这个U盘是不是得有这个Type C这个接口啊,得有这个USB这个接口啊,我只有有了这个接口。
12:18
以后我才能在我的计算机上去使用,是不是才可以正常去和我们计算机进行这个,诶,这个数据的一个存取的一个操作呀,懂这意思吧?哎,所以我们这些什么USB接口,还有什么水管的这些接口,这些东西都属于接口,那接口是什么?接口实际上就是定义的一个规范啊,接口就是定义的一个规范,只要你实现了我这个接口,那就意味着你满足了我这个规范,那你满足了这个规范,那你就可以在我们的指定的场景当中去使用啊,可以去使用满足我要求,所以其实接口的话就是对我们这个类的一个限制啊,对我们这个类的限制,那比如说可能有些场景啊,一些场景,哎,那比如说我们想我们做一个,比如说举个简单的例子,哎,我们做的是一个游戏的一个这个,呃,游戏的软件,哎,游戏软件是打枪的,那我这游戏里边的话,我们会有各种各样的枪是吧,有什么这个有手枪。
13:18
啊有手枪我就不画了啊,有手枪哎有什么呢?哎有这个冲锋枪,有这个冲锋枪,哎有这个什么呢?哎有这个这个这个这个这这这步枪啊步枪我们有各种各样的枪,那这个时候实际上这些枪来说,对我们游戏玩家来说,你只要是枪我们就能开,对吧,只要是枪我们就能开,那他怎么就能试枪了,诶他是不是一定要满足我的一个特定的需求啊,首先他得有枪口,诶二一个得能装子弹,三一个得有那扳机,是不是只要满足我们这个一这个要求,它就是一个手枪,它是一个手枪,我们在这里边是不是就可以用了,诶所以接口也是这样,接口的话对类的话是一个限制,诶你只要满足我的这个要求,OK,你就你只要实现了这个接口,你就满足这个要求,你满足了我这个要求,你就可以在我的这个特定的场景当中使用,所以接口就是这样一个作用啊,这么一个作,其实这个接口啊,跟我们的这个叫什么呀,叫这个抽象类,它是非。
14:18
非常非常的类似的,唯一的不同点呢,其实就是有这么两个,第一个就是我们在抽象类当中,我可以有抽象方法,也可以有普通方法,但是到接口里边它都是什么抽象方法,这也就是接口里边定义东西就是让你来实现的,我不会给你指定具体的值。第二一个我用抽象类的时候,我用的是expense,我用的是继承,而我们在定义一个接口的时候,我用的是什么呢?用的是这个employment,用的是一个什么呀,实现主要就这两本区别,但是他们无一例外,主要还是其实就是接口,主要还是就定义了一个标准,诶,限制我们某个类,它必须的去符合我们这个接口的这个标准。
15:03
好啊,接口这个概念,它相对来说其实并不复杂,并不复杂,但是呢,我由于我们可能是第一次接到接触到这个概念,所以我们需要一个时间去消化一下,但是别着急啊,慢慢来,随着后边我们用,随着再去慢慢的去体会这个接口的一个作用,然后再补充一句,就是包括接口也好,诶interface,包括我们这个抽象类abstracted class这些东西都是我们TS里新增的,也就是这些东西只有在TS里有,你说我拿到这个GS里,我整个接口吧,对不起,没有这个东西,所以你像我们编译后产生的文件,你在那里,你看我这定义的interface买inter,但是在我们编译以后所产生的文件里面一定是看不到interface,你看我们在这儿是不是看到的只是一个类啊,诶并看并没有看到那个interface,所以这1.1定要注意,这些东西是我们TS里独有的,也就是只有在我们写的时候它才有。
16:03
东西编译完了以后,他就,哎就没了啊,就没了,好这个是我们对接口的一个简单的介绍啊,自己呢尝试去用一下,去体会一下,我们这儿呢,先停一下。
我来说两句