00:00
那这个时候呢,我们打开打开我们的这一个课件,打开我们的课件S这个高高级特征。好,现在呢,我们先定一下位啊,定一下位,我们昨天呢讲到了。这啊讲到了这啊,那讲到这过后呢,现在呢,我们来看带有具体实现的特质,这个没问题,就说和JA Java呢,这个现在Java jdk版里面接口呢,他应该也是可以带的啊,就是我说的是老版的,大家知道就行了,这个我就过一下,就是核心,就是说核心说什么特质中。方法不一定是抽象的,也可以是非抽象的,这在前面讲过了,过一下就行了,好,现在呢,我们讲特质的一个特别重要的特性,叫动态混入。那么关于动态混入呢,同学们在后边用的是非常多的啊,用的非常的多,那为什么说这个用的比较多呢?因为动态混入它真正实现了一个结耦啊,真正实现一个结耦,那同学们都知道我们去用一个类。
01:06
去,呃,继承了另外一个脆的过后呢,其实这个脆脆的里面的东西,它指类也会得到,但是如果我们用动态混入呢,那你一个类的混入不会影响到它的任何一个之类,诶这样就真正的达到一个解耦啊,就是很松散,在我们开发中呢,我们特别提倡的一种叫做解耦,开发中还有一些原则对吧,就是解耦他希望达达到什么效果呢?就是修改代码是封闭的,但功能扩展呢是开放的,这叫闭合原则,一些老师应该提过一个东西叫OCP原则。提过这个吧,OCP原则是一个重要的原则,OCP原则,呃,翻译过来就叫闭合原则B啊,闭合。闭合原则,什么叫闭合原则呢?就是简单的讲,如果用我们通俗易懂的话来讲,就是修改代码,是关闭的修改这个源码。
02:07
修改源码是关闭关闭的,但是功能扩展呢是开放的,而是功能扩展是开放的,它是希望达到这么一个叫功能扩展开放。哎,这就是我们最喜欢的一个东西,那么在SC里面呢,它这个OCP原则,这个动态混入就有一定的体现,同时呢,在哪里还充分体现了OCP原则呢,就是我们的影影视转换那一大那一大张全是充分体现OCP,它在底层呢,做这个包装好这样子啊,我们这个OCP待会还要继续说,现在我们来看一下动态混入,看第一句话。除了可以在内声明时继承特质以外,还可以在构建对象时混入特质,那么扩展目标类的功能好,这是第一句话。第一句话,第二句话,此种方式可以应用于抽象类功能的扩展。
03:03
啊,第三句话动态混入是撕开了,是撕开了特有的一种方式,Java呢,并没有,这是撕开了特有的啊,可以在不修改类的声明和定义的情况下,扩展类的功能非常的灵活,就是说我不改你类的定义,我不改你的,你原先那该怎么写怎么写,我不动。我不动你的东西,那么我可以干什么呢?我可以灵活的扩展,还有动态混入,可以在不行不影响原有继承的关系的基础上给指定的类扩散,也就是说你原先整个这个继承的关系不会受任何影响,包括你的子类也不会受任何影响。那现在呢,我们基于这四句话,我们直接上案例了,那这个案例呢,这面有些代码特别简单,我就不写了啊,这简单代码我直接拿来用来吧,同学们,我们打开这个代码,我们新建一个小章节,叫什么呢?叫动态混入,因为这里面内容比较多,我干脆新一个。
04:05
叫mixed mixed就是混入mixed in啊,就是叫混入啊,Mixed in混入,那么我们这边专门写它。走一个mix来,我们先写第一个小案例。Mixed啊,Mixed in demo01对不对?DEMO0一来走一个小案例。好的,那刚才老师说了,里面有些基本的代码呢,我就不写了,我把这个拿过来为我所用,好,我先简这里解释,这是一个特质。哦,这是个特征,大家已经看看懂了,那么特质里面呢,我写了一个方法,没问题,这个方法呢是呃,已经默认实现过的,就是default默认实现了啊,这个是默认实现了。我就要实现了就就行了啊,实现了好这是一个方法啊,这这是个特质,然后呢,我们再来写两个啊,两个空的,一个是空的Oracle DB,一个是抽象的myc口三,那这这两个类呢,没有目前是空的,没没办法啊,是个空的,这边呢也是空的。
05:11
那现在我要做一件什么事情呢?诶,我想这个代码类的定义我不动,但是我希望他能够用到我的OPER3里面的insert方法,好,这个地方大家看我怎么使用。注意听在不修改不修改类。啊类的这个定义基础上基础上A基础上干什么呢?让他们拥有新的功能可以啊让他们可以使用什么呢?Treat里面的方法,哎,所你那同学们看我用动态混入写一个啊同学们六一个Oracle DD好,然后我怎么用呢?With。With,好,With什么呢?我们的operator。
06:01
好,这就写完了,点VR,我们来走一个啊,这边是Oracle DB。好,大家看这个地方就叫动态混入,那么相对说我在创建一个对象时,同时混入了我们这个trade,那么我就拥有了insert的方法,大家看我的代码就异常简单了,我直接给大家玩一把颠insert。传入一个100代码OK的,如果你没有混入啊,同学们,你没有唯一这句话你肯定是用不了的。对,如果说你看,假如我把这个代码这部后面这部分已注销,马上告诉你insert不能识别,好,这个语法编辑已经能识别到了,来走一个运行一下,好,我们看这个运行结果呢,跟我们想的应该是完全一样的,叫插入数据100完事,那同样我们能够对一个普通的类进行扩展呢,我们也可以对一个抽象的这个类进行一个扩展,来写一段代码。六一个MYCQL3啊MYQL3,然后这个地方呢,你也不用管它,直接位位什么呢,operator3.vr。
07:06
好,同学们看这个代码也写完了,那为什么这次有一个特点啊,他说说老师,呃,你这个抽象类刚好走了狗屎运了,因为里面没方法,那如果你这边如果有一个抽象方法怎么办呢?我待会再说,我待会再说啊,我们先看没有这个抽象类里面没有方法,我们这样用是可以的。因为说老师抽现率不是不能实例化吗,这个地方就相当于这种感觉,因为你这没有。没有真正的抽象方法,那我相当于这个方法就是可以实体化的,你比如说你看我这样写也是可以的,我直接这样写,大家看看能不能能不能成功啊T61个myc口三。你看这个也是OK的,但是呢,这个括号,你这个大括号你要保保留,就相当于说我认为这个大括号里面已经实现了一个东西,但是只是因为你这个抽象方法,抽象里面没方法嘛,所以说这个其实就是一个匿名子类了,好这这两个都可以用啊,好现在我们来运行一下MYCQ3.insert,给他来一个200。
08:08
代码也是OK的,运行起来代码也是OK的,好,你看现在呢,两个都成功了,也就是说我们通过动态混入就搞定了这个事情好。第六一点要简要解决一下,如果抽象那种没有有啊抽象那种有。空格有什么呢?有没有实现过的方法,或者说有抽象方法啊,这样写抽象内容,有抽象方法。这样写的更简单,有抽象方法。那么这个时候咱们怎么动态混入这个特质呢?Very easy,大家看,我马上做一个改进。请看,呃,为了以示区别呢,我在这方再加一个啊,不跟它写在一起,我加一个下划线,好,这里面呢,我写一个图像方法,比如说defc完事,那这个时候我们怎么去混入呢?好,如果如果一个抽象内有抽象方法,抽象方法如何混入,如何动态混入,这个这个特质好very的easy类,请大家看这样写啊。
09:20
那么首先666的时候,把这个MYSQL3拿过来,那么拿过来过后呢,这边它一定会提示我们实现这个方法,来我重新这样写一下啊,6MYC口消三来看这里,这个地方呢,你可以写上自己的一个实现,比如说CC完了过后,同学们看到这个后面你加位就不好使,你加位这个比如说operator这个不好使,应该怎么样呢?反过来写就没问题了,它应该这样写啊,同学们把这个实现。拿掉。然后我先为热,先为热,然后后边再去把实现方法写进去,好这个呢就是可以的,我看这地方为什么报错了啊。
10:09
是不是我这多写了一点东西啊,是不是多了111堆玩意,刚才是吧,哎,这样就可以了,也就是说如果同学们用这个动态混入里面,你这个抽象类里面有抽象方法呢,你得把这个实现这一部分怎怎么办呢,整到屁股后边去,你不要写在前面。不要写在前面,好,这个时候呢,我们就完成了来VR1项。那我写一个啊,把这个地方我测一下,我就直接写到这。啊,就VLMYCQL_O了,同学们看两这两个方法就能用了,那么我们来用一下这两个方法是不是都能用啊,一个是C,一个是insert my cql下线点insert方法可以用的,给它来一个999,再来调用我们刚才实现的那个方法,点什么呢?C。
11:02
好OK,诶,这写错了C。OK,同学们看两个,诶这个地方我是不是少了个下划线呢?诶,少了个下划线。呃,粘粘过来吧,啊粘过来,好同学们看这个就OK,我们来运行一下走,我们一运行,我们看到这个效果呢,就出来了,一个是9991个COK,好,关于动态混入的基本的介绍就说完了,那下面自然就是我们的细节,好同学们我们先把笔记简单的阐述一下,还是老规矩啊,先说基础再说细节。啊,这样你学起来呢,也有一个套路对吧,好,我刚才讲的是这样一堆东西,是不是就是带有特带有特质的对象动态混入。好,我们整一个啊,我们整一个,刚才我们讲的是什么呢?诶,刚才我们讲的是这样一堆东西,标题三。好的,第一个,哎,第一个。
12:02
第一个。第二个。好第三个,然后呢,这边是第四一个啊动态这是第四一个好案例演示也在这里,我把案例演示呢,放到第六一个位置吧,把刚才这个写,其实同时演示啊,同时注意一下。同时要注意,要注意动态混入,混入啊,混入时如果抽象类,抽象类有抽象方法是怎么写的,有抽象方法啊,如何如何混入好看这个代码混入。把代码呢给同学们拿过来,大家一目了然,好,就是第一种方式啊,第二种方式等等,把代码呢给同学们板述一下。直接放在我们的这个地方。好,同学们关于动态混入的一个基本的介绍就说到这里。
我来说两句