00:00
打开我们的万人篇,我们来看一下。那么我们看看他接口的介绍,再从面向对象来看,来看接口并不是属于面向对象的范畴,为什么这么讲呢?因为你们想一想啊,抽象类可以说是面向对象的,但接口它的本质它是对我们面,它的本质实际上是对我们这个继承机制的一个补充,因此这个马丁奥德斯基呢,他认为这个接口并不是属于面向对象的,于是他直接就把这个接口。传统的那个接口就拿掉了。他干了些什么事情呢?没有借口了。说老师没有接口,那麻烦了,如果你这真的没有接口,那怎么做到跟Java的一个无缝接轨呢?这个家伙呢,又做了一个,做了一个这个,呃,改进,或者叫做了一个包装,它提供了一个什么呢?它采用了一个叫。这个玩意脆的,这个叫特征,其实有同学如果学过PHP,知道PHP里面有个叫脆啊,有有同学学过这个的就知道,那么这个treat是什么呢?它叫特征或叫特质,有些人叫特质啊,诶就说这个呢,可以翻译成特特质,也可以翻译成特征。
01:13
那么他用这个来替代了接口的概念。那说老师他替代了,它跟Java接口是不是一模一样呢?不是的,这个treat有点类似于Java的接口加抽象内,再说一遍啊哦,虽然现在大家还没有体会,你可以简单的理解成它,可以简单理解成这个脆脆等价于,等价于什么玩意呢?后面你们就知道了,它是等价于这个我们Java里面的interface加OB structure。Obstract class在那块,因为他把这两个东西融融融在一起,构成了一个。啊,以后后面我们分析分析,呃,我们看它底层编译,你们就会更加的清晰。
02:00
好,那么也就是说,多个类具有相同的特征,使就可以将这个特质独立出来,采用关键字来进行声明。那既然我已经把它本质点出来了,我已经点出来treat本质就是接口和抽象类的话,同学们在后面学习你就知道,那这个treat既可以有抽象方法,也可以有非抽象方法,既可以有普通属性,也可以有抽象属性,对不对,但是大家一下就明白了吗?啊,因为它是两者的结合。好,好,那么如何理解这个特质呢?好,我这里画了一个图,我这里画了一个图,特别的有意思,大家看,我画了一个吹的原理图,因为时间的关系,我就直接给同学们拿来看了啊,同学们看。嗯,如果原先是Java的接口。假设这个是Java的,就是interface,那interface呢?假如我这个C继承了BB,继承了A,那么如果我要让B去实现这个接口,我问大家一个问题,是不是咱们用implements就可以了?
03:08
就implements去实现这个in特尔特尔零一就OK了,好那么我们这个这个SC里面的这个特质呢,它首先有几个改变,第一个它不叫实现。它的概念已经不叫实现了,它叫什么呢?它叫继承,这个脆,首先这个概念呢,后面还会说啊,它就称之为叫继承了。那为什么说叫继承呢?因为我刚才讲了一个原则嘛,就是脆的呢,它等价于接口加抽象类,如果站在抽象类这个角度来理解叫继承也是说得通的啊,所以说它这个概念呢,就没有这个implement这个关键词就没有了,这是第一点要说明的,第二点我感觉啊。我感觉这个斯卡牛逼在什么地方呢?他开他对这个脆特的使用,他牛逼的一个地方叫加入了一个特别有意思的东西,叫动态混入,叫mixed in。
04:06
诶,为什么有这个东西呢?这就想起我当年学Java的时候,其实我的脑海里面一直有一个疑问,一个大大的问号。因为我在学接口的时候,所有的所有的老师,所有的书上都会讲一句话,其实我一直很疑惑,那个书上会说什么呢?他说接口的价值是在于两点,第一点它能够对我们Java的单继层做一个弥补,啊,这个我承认,因为你单继层,呃,那那个你不能继成多个嘛,我承认。第二句话我就不好理解了,他说他说他说什么呢?他说这个接口能够解耦,是这意思吧,接口能够解耦,但是实际上大家都知道接口解偶站在站在个Java的角度呢,它是有点局限性的,我举个例子,同学们如果这个B,我我说下,如果这个B去实现了这个接口特零一,那么假如这个接口里面有个方法叫做OK。
05:03
请问当我这个B实现了这个接口过后,我的C是不是也是可以去用到这个OK方法的?是吧,是的,当然当然了,有有同学说了,这个呢,也有些书上也讲过,有些书上也讲过,这个不叫这个不能认为是你必实现这些接口C就实现这个接口,而是它的一个传递机制,是不是。是不是在讲,假如说老师提到这个传递机制啊,啊,是的,但是你不管传递不传递,毕竟你你让这个C多了一个方法吧,你毕竟让他多了一个方法,其实人家C可能不不需要这个方法,但是你强制给人家这个方法,我不管你是传递意志还是非传递意志,毕竟让这个C。多了一个方法,那假如人家就是我就是想作为我,我这个安全性来讲,我可能就是一项B用一下这个方法,但是C不让用。你这个Java就很难做到这个点,但是我们撕开了解决这个问题了,它引入了一个动态混入,如果使用动态混入这个机制的话,我们这个B去使用的这个treat里面的规范,那么这个C不会受到任何的影响。
06:15
这个就是他很厉害的地方啊,后面呢,你会发现这一点还是非常好用的,而且你们在做开发的时候会经常看到这种混入,好这个呢,就是我用这个图简单的呃,给大家说了一下,这就是我们出的原理,它怎么样呢?它是用这个B,它有两种方式来使用我们这个斯开了的特质,第一种就是它斯开了特有的一种语法现象,叫动态混入,还有一种方法呢,就是我们传统的一种方式,就是传统就是跟我们以前Java一样,干什么直接继承。这个特质注意啊,这个继承,这个继承关键词就是再也不是那个implement了,两点注意一下,好,这个原理图我们就说到这,那么我给大家简单板书一下,下面我们就快速入门了,咱们就不啰嗦了啊,好,同学们,我把这个给大家先聊到这里来。
07:10
OK,这是an接口的一个介绍,来吧,标题三。标题三,好,我这里总结了这么两点对不对?好的,那这是我刚才说的第一点。哎,这是我们说的第一点第二点,然后呢,我还画了一个简单的示意图,示意图SC。A scan这个treat啊,就是继承,继承这个特制,特制特质呢,这个单词叫treat的一个示意图。示意图,这个图呢,我在这儿已经有了,注意我这写的几句话。就是话虽然很少,但是呢还是比较重要的,第一个开了在一个开了的一个类,在跟这个脆进行结合的时候,第一种方式是动态混入。
08:06
啊,动态混入是什么?后面我们会详讲,第二个呢,就是我们传统的方式两种,如果是传统方式让B去继承一个trade,那C1定会受到影响,但是如果是动态混入,C不会有任何的影响,它只是用一下就完事了。好的,同学们,我把这个图给大家放到这儿,时间的关系我就没画了。好,那既然有了这样一个基础基础知识之外,过后呢,我们就往下面来做我们这个treat的一个说明,好,我先截取一段视频。
我来说两句