00:00
下面呢,我们来简单的再来聊聊这个特质构造的顺序,说诶说韩老师,刚才你不是已经把特质构造讲完了吗?是的,我讲过一种,我是混入,我是动态混入,顺序讲了,但是我没有讲。什么呢?声明是同时混入,我们要讲这个,这个呢我要补一下,大家知道我们这个混入其实有两种方式,一个叫动态混入,一个是什么呢?声明式混入,声明时的这个类的混入,我没有讲是不是,哎,就是这个继承特征的是多是那么我们看这个地方直接拿案例的,这个案例太长了,所以说我这也不写了。你看我我这边要讲的一个什么话题呢?请看标红的部分。这个地方其实也叫混入,但是呢,它是在生命内的时候,同时就混入这个这个但而且大家看也是静态的,类似于静态的一种方式,对不对,这种方式同学们我问大家一个问题啊,这种方式方式去把这个对象给它,把这个特殊混数句,那么FF如果有一个类继承了FF,是不是也就相当于把CC和DD也被继承下来了,是吧,这个其实是类似于我们声明的时候就去混入,有点像静态的感觉。
01:17
那么对于这种方式,我们去创建一个对象,它的这个声明方式又是它的这个构建方式又是什么样子的,我们要做一个对比,前面我们讲了这种,前面我们讲的是构建对象是动态混入,现在呢,我们来把这个声明类的时候动态混入也给大家讲一下,做一个比对。还是以这个为案例啊。来,注意同学们把这个讲完,我们这个特质这一块就告一个段落。好,同学们来,最后呢,我们把这个混入说一下,它的构建顺序,再加强一下啊,就是treat a mix in。Mixing。Mixed。Mix in,那么这个我们的对象的一个,呃,一个这个创建的顺序,比如我们就说。
02:06
SEQ。创建呃,动态混合顺序吧,干脆就取这个名字,这个名字也不好,不是很好取哈,就是因为你的案例又小又多,所以就不好取啊,但是知识点讲知识点呢,都是很小的案例,对吧?好,那为了省事,老师呢已经把这个准备好了。我直接拿过来为我所用,大家把这个关系简单的捋一下啊,同学们简单捋一下。AA是一个特质,BD继承了,ACC继承了BBDD继承了BB。好,那也就是说我有四层能看懂吧,D继承了B。呃,不不不是四层啊,三层三层看错了啊,A是最上级的,B呢,呃是第二层的,C是第二,呃,C也是,C是第三层的,D也是第三层的,看清楚了,好,我就不写了,这是一个普通的。普通的类什么都没有这个地方,同学看到这个是相当于说在声明时我。
03:04
我既有E又有C,待会要研究这个顺序啊,这个相当于是先继承了一个类,然后再混入了,或者说继承了两个特质,先先继承了意义这个类,然后然后再继承。啊,再继承CC和DD,好,然后呢,这边有一个K,这个K呢,直接继承了一个普通的类,好,我待会又这每个案例都是有都是有有有作用的这个K。KK直接直接继承了普通的类,谁能。好,完事了,那现在同学们看啊,我们来写两个小案例,我们来分析一下它的流程,这个要稍微慢一点啊,稍微慢一点,因为呃,本身前面讲了一个,如果不注意反而就彻底的蒙圈了。我稍微慢点。
04:01
好,我把这个代码呢,先放到这里来,我先注销这一部分。好,同学们可以看到啊,同学们看。这个地方我用我去构建了一个FF,这个FF是从这声明的。OK,那这个时候我们是这种方式去创建一个对象,它的这个构建顺序呢,其实是这样子的,它其实这样子的,这个跟我们Java其实是非常相似,它怎么走的呢?来看一个案例。我我把这个写到这儿啊,就是。这时我我就说一下FF是声明时声明它是这个类型,FF是如这样的形式,这样的形式什么样的形式呢。哦,这样系数把它拿过来。看起来有点远。好,我们现在开始来分析它的流程。他的流程,呃,因为这个是一个属于记的东西,我也不多说了,我直接把这个把这个顺序给大家写过来,我们来把这个流程走一下就行了。
05:05
好,大家回顾一下。好,我把这个顺序走一下啊,第一步。首先调用当前类的超类构造器。首先构建当前当前类的超内部战略,即它这个顺序是怎么走呢?先在这时它优先注意听这句话啊,他优先去调用自己意义的这个超累啊,意意识到超累嘛,于是他先指定的是意义调调。看清楚了啊,他先执行的是E1点点。好,我把这个呢写到顺序第一步。他把这个做完了以后呢,现在他的工作是这样子的,他的工作是这样子的。它是调用第一个特质的负类构造器,也就是说此时此刻他是把他这个静态声明的当做一个整体。当做一个整体来对待的,所以说这个时候呢,他继续找第一个复特制的构造器,第一个复特制是谁呢?是。
06:08
CC。CC也就是说它的地位跟它是一样的,那么这个CC呢,会找哪里呢?找到CC,发现CC还有一个。负类构造器,于是它找BBABB找到还有AA,于是就找AA,于是它正方形形输出了AA。好,这个我就快速的过一下啊,同学们要高度注意,那么A回来过后呢,他再去执行自己的BB。执行自己的BB,然后这个BB执行完了过后呢,紧接着继续去执行自己的CC。好就完事。这个就完事了。那么紧接着继续往下去进行这个负类负特质的DDDD,找这发现有BD,但是BD已经构建过了,因此直接输出BDDD。好这个地方就输出它整个这个走完了以后才去执行当前类的构造器及最后执行,注意听最后执行自己的这一个构造器KK。
07:13
哎,对对不起啊FF好这样子的这个顺序呢,就应该是A啊不不不是e abcdf,好,我们来运行一下。好,我们看一下这个地方是哪地方有问题啊。这个地方它是不是我这个内有。呃,看看这里。他说。他说这个是不是我们少了一个,诶salary是一个,这谁写的这个这这是个英特,你怎么写个字符串呢,这个还嗨,这个太恐怖了啊,但是他没播错啊,他没播错,你哥气人不气人对不对啊,这个是很不好的事情嘛。
08:05
太过分了嘛,这你我我不小心写错了,你应该给我提示啊,你是干啥吃的呀,对不对,那得怪他啊,EABCDF完全正确,好,这个顺序我们就说完了,就是静态的方式我们就说完了。好,紧接着呢,我们来探讨第二一种方式就是什么动态混入。好,我把这个打开。动态混入这个案例,我们打开这个时候顺序呢,我们再说一遍啊,这个我就讲一次了。好好,这个时候同学们可以看到现在的这个构建方式呢,是KK啊,但是这这个情况可以可以不要啊,你你加上也可以啊KK。好,那么我们来看这个时候它是一种什么流程呢?这个是动态混入的,哎,这时这时我们我们是动态混入,那么这个时候它的流程应该是怎样子的呢?好,同学们还是老规矩,因为这个是记的东西,我也不去多说了啊,这是它的本质跟他跟他有个区别了,注意听这句话啊,这句话只要听懂了就没问题了,刚才大家看到我们这种静态生明方式,它是把这个当成一个整体的基。
09:17
他是在。在在继承这个意义混入CC的时候,这个对象本身没有创建起来。这一点我们我们通过上面这个地方,我们其实得出一个结论,从他这个构建的顺序我们可以看出来,他在去这个静态去做这个工作的时候,其实这个对象本身还没有重建,因此它整个流程就是按照严格的按照我们以前那个继承的关系来走的,是不是。是是这样子的啊,所以从这一方我们得出的一个结论,大家应该有个印象,但是到了这个动态混入呢,我先提出一个总总的一个纲领啊,就是一个最重要的点,就是动态混入,它是先搞定这个对象,然后再动态混入。所以说它的顺序是这样子的,就动态文先先创建。
10:04
这个6KK,也就是说他先创建了一个这样的KK这样一个对象。然后再混入,那这个数据大家都知道肯定有变化了,然后再混入。那肯定是有变化的混入,那么我们来看这个流程应该是什么样呢?打开我们这一个。这个说明啊。前面我们在讲这个时候呢,其实我们这个类是个空类,所以说没有看到这个特点。你要看前面你的MYSQL5啊,MYSQ都是个空的,现在有东西了,好它的顺序应该是这样子的。好,这个老师也是细致的写了一遍啊,那我肯定就不会再再多说,我们直接来看一下顺序。注意,这个动是先搞定一个对象,再混入其他的。其他的特质,它是这么一个玩意儿,是这么一个流程。都是好,既然如此,下面肯定同学们大部分同学都能回答上来这个流程了,好,第一步,第一步首先找KK,他发现这个KK的。
11:08
他发现这个KK继承的意义,那他把他当成一个整体了,那他干什么呢?首先他去执行这个当前类的超类的构造器,所以他先走这个意义。啊走EE里面呢,没上面再没有了,所以它直接输出E,这个肯定还是一样的好,第一步走这个E没问题。那么执行完这个意义以后呢,他又干什么呢?E执行完了过后,诶意义没有了,他就他就回来直接把自己这个做完了。也是他先搞定自己。他先搞定那个,就是跟那个基层内的那一部分先搞定,然后再混入,所以这个地方它就执行这个,执行完这个过后,后面的这个步骤。就跟前面是一样的,也是后面这个步骤呢,就相当于是这一部分。是不是这样子的。
12:01
它其实就是这样执行的,就是abcd。啊,后面这个混入呢,就。就是AB。Abcd。AB,诶,这个为什么他最后还要还还要还要给我改一下啊AB。BCC号6D就完了。所以说他的有一个最大的区别是,他先跟上面最大区别是先把自己这个继承这块全部走完。然后再开始搞定一系列的这个特质的温度,所以还是有些区别,那么我们来看看这个流程是不是这样子的,为了看到这个区别,我打一个分隔符。好,这个我们研究的话题是,呃,这个特质混入的就是创建的一个顺序啊,来执行一下。好,我们可以看到这个时候顺序呢,它急确啊,EKEKABCD好搞定好,那么到此呢,我们就把这个就说完了,注意注意以后大家看这个顺序,顺序的一个流程,就怕就怕担心后面有人啊问大家这个流程是什么,那么它的本质呢,我这总结了一下啊,总本身你可以这样理解,怎么理解呢?第一种方式实际是构建类对象时,在混入特质前,该对象没有创建,就是他他在混入的时候,其实它把它成一个当成一个整体,那第二种方式呢,就是动态混入式,它是实际是先构造一个匿名的子类。
13:30
然可以理解成在混入特质时,该对象已经创建了啊,可以这么去理解。好,这样理解呢,大家就比较好记了,好,现在呢,我把这个给大家板述一下就完事啊。好好,这是我们讲的一个动态,就是呃,特质构造的一个顺序,我们就聊到这里。好聊到这里面,下面呢,这个就比较简单了,诶我就把这个拿过来就完事了啊,然后把这个案例粘过来就行了,好第一个呢,第一个是这么一个流程。
14:02
先做了一个介绍。啊,先就你介绍两种形式嘛,第一种。第一种呢,就是我们所说的声明类似动态混入。他的这个流程是这样子的,我这省个事儿,我就直接给他来一个标标号就行了啊。给他来一个这样的比较好,就简单这样写一下啊好,然后呢,这边有一个,哎,这边也也应该标起来当前,最后是走的当前那个啊。最后才去使用自己当前构造器。然后案例给他放到这。诶,代码的案例。代码里。好,代表案例呢,呃,我们干脆整体放在一起吧,好吧,然后呢,第二种方式呢,也说了,就是动态混入和它的一个理解,我也总结了几句话,对吧,好,给大家放到这第二种方式,哎,第二种方式,第二种方式呢,它的顺序是如此这般的。它的顺序是如此这般的,诶调用怎么怎么怎么走,对吧,一次性的给他,然后呢,分析了一下他们两种方式的一个区别,那么第一种方式你怎么理解呢?实际上可以理解是在构建类对象时,在在构建类对象时,在混入特质时,该对象还没有创建,即整体做一个整体来创建。第二种方式是干什么呢?先可以理解成是系,就是在混入特殊时,该对象已经创建好了,因此他会先把自己的那一套继承的关系走完。
15:28
啊,他会把自己基础关系走完。好,这就是他的一个区别,那么最后这个代码演示写到这。代码演示,诶代码演示,那么我也给大家整理到这就完事了啊同学们。好,我把整个代码给大家放到这里来欧了。好,放在这完事,那么我们截取一段视频。
我来说两句