00:00
的累不累?来,我们看下一个话题。啊,这个我们已经,哦对,还还没到那儿呢,还要讲东西呢,还要讲一个什么呢,就是。特质里面还有叫扩展类的特质,这什么意思呢?同学们啊,是这样子的,我们特质可以继承类,前面已经讲过了,那么运用它这个特点呢,我们可以来扩展该类的一些功能,其实到这儿你们可明显的感觉这个特质啊,其实本质上就有点像类了。你看特别特别像类,所以你看为什么说一切皆为对象呢。你看他他他继承了,而且他也能够通过这个混入你可创建对象,你看他兼顾很多特性的,都特别灵活这玩意儿。那你看我这举了一个例子,比如说我这有一个特质叫log exception,继承了exception,那我这个特质继承了一个类。你看我们在前面讲Java的时候,同学们在学Java时候,接口咱们能继承类吗?
01:00
八里面能不能继承?你们学拔了吗?学了过后八呃,老师讲接接口能不能集成内容。忘了是吧。也没提这个事儿是吧。没有题,那同学们可以去试一下,同学们可以去试一下,如果说我们这个scan,它这个用的那个编译器都是统一的,那理论上它应该是可以的,但是同学们最好去试一试啊。到这里你看它这一个特质,因为我讲了特质兼顾这两种接口和类的特性,那么它的确可行机制,那这样呢,我可以通过继承一个类可以干什么呢?来扩展一个特色,然后我再让别人混入的时候,我就相当于又增强了功能。你看它特别灵活,到这里面大家可以感受到这个特质很牛啊,就几乎上把这个面向对象啊,还有这个接口啊,整体绑在一起了,那我举个例子吧,就以这个为例,大家看我有一个no exception,继承了exception,大家看这里面我写了一个方法,我直接使用了get message。
02:04
我为什么可以使用get message呢?因为这个get message是从。Exception过来,而且大家可以猜一猜,这个exception实际就是我们Java浪里面的那个exception来走案例。好,这个叫扩展特质啊。老师特质怎么东西这么多呢?面向对象,它最核心的啊,这个特质是一个一一个很核心的内容,好同学们,我新建一个包包,这个呢,我们就叫,呃,这个叫什么呢?还是特质啊,还是特质。呃,取个名字吧,我就看看后面这个应该是属于都是属于特质的。好,这个叫扩展类特色吧,新建一个包。然后呢,我们。简写一下。好的,同学们,我们新建。一个文件对吧,叫扩展。扩展什么呢?扩展我们的这个特质DEMO。
03:04
DEMO01,好,你看这个现在名字都特别不好取,因为太小,案例太小了,对吧,不像你们写项目对吧,就一个好,现在呢,我直接给大家演示一个,比如说我这里有个treat取个名字啊,这个名字我就就懒得写了啊,特简单,就拿过来用就行了,解释一下就完事。呃,代码都是很小的代码。好,我们来看看这地方它用了,那么这里我们直接用get message,为什么呢?说明一下。二说明。说明什么呢?就是我们这个log继承了,继承了exception,那就相当于干什么呢?我这里就可以去使用及这里面这个特质,这个特质就可以使用啊,就可以使用什么呢?就可以使用CI里面的一些功能,对吧,你有什么功能我都可以用。那么你看这个get message我就用了,为什么呢?我们注意一下。
04:03
看在这里面有一个long except,再追进去往下看,在这里面你你就可以看到有个get message这个方法。诶,这个还没有是吧。没有的话,我们继续往上涨。他一定会找到一个get message在哪里呢?啊,可能是在这里面。好,往这里面去找,有没有get message呢?不可能没有,是不是你要说没有的话,这个就就讲不过去了呀。往下搂,往下搂。好,我们再往下面看的时候呢,我们发现。啊,我们发现还还没找到是吧。诶,还真没有啊,不应该咯。不应该哦。寻寻觅觅。哎,这不找到了吗?是吧,有一个方法get message,诶它就是在这就一生层层的给你继继继承下来的,OK好这个呢,就充分体现出什么呢,我们这一个特质的又一个特点又特,当然你可以继承这个,你还可以继承别的嘛,对不对,那就功能变得很强大了。
05:05
那我再让别的来混入这个特质,那它有这个功能好,这个呢,就是我们这个扩展特质的第一个基本说明,再来看下一个所有混入,注意听啊,所有混入该特质的类。所有混入该特征会自动成为那个特质所继承的超类的子类,什么意思呢?什么意思呢,就说我前面存入了exception。那么如果我有另外一个类混入了这个,那么我这个类也就成为了exception的。之类,他是这个意思。好,那这个就有很多特性了,那比如说我们在这个基础上再加一个东西啊,我这扩展一下,比如我在这加了一个unhappy exception,我混入了我我混入了这个log exception,那么他的他是谁呢?他也就是exception之类了。
06:04
就这个呢,就变成exception,我说一下啊,因为。因为unhappy unhappy,他继承了,他继承了log exception。啊,而而什么呢。而。而这个logging exception他继承了。对他继承什么呢?诶,他继承了这个exception。Exception ece,那么第三点就是我们这个unhappy exception也就成为exception之类则就成为。成为什么呢?成为exception的职位没问题,这个就是一个继承的关系,好这个说的这句话啊,我们再看下一个,如果混入该特质的类已经继承了另外一个类的A类。比如说注意听这样一个细节,如果混入该特质的类,比如说刚才那个unhappy。
07:03
他他在混入之前,他又去他先继承在混入的啊,比如他他在继承的时候,他再去继承,我们这个地方则要求A类,就是你你继承的这个类是特制超类的子类,否则就会出现多继承现象,发生错误。这句话怎么理解呢?我举个例子,我举个例子啊,同学们看我这再举两个例子,大家一看就彻底的明白了,比如说。比如说我这里专门来讲解这个细节。就大家一时半会不好理解,我举个例子,大家一下就明白了啊,我们学案例学技术,最简单方法就说,不要说猪长什么样子,直接把猪拉出来啊,这就是猪啊,就完了,你要去咬毛啊,这个猪长得大,耳朵长得黑乎乎的,嘴巴往前拱,哎,这不是大象吗?是吧?所以直接跟把猪拉出来,这就猪。
08:00
就好像你,你们最好的最好的解决方法就是,呃,比如说你将来有了问题,最好的方式就是让别人坐在这把代码给你写出来,但是很遗憾,一般人不这么干是吧,就说一般最好的解决方法就是你有问题,你要把代码给写完了,这个解决了对吧?但是一般人不会这么看,太累了。好,现在呢,我们来看一下他是什么意思,就以刚才这个为例来,朋友们请注意,现在我把这个改成三,改成二,然后呢,我这样做了一件事情,我先exception。在exce,哦,我这样写啊啊写index out of exception with。好,这个就是正确的。他说老师你这是啥意思,我不明白,大家首先知道log log的exception是不是它相对它混入了exception,那么其实它这个地方就意味着我们这个地方已经变成第三分之内了。你这样回做这个index out of exception,你看它的负类。
09:01
他的往上追。它的负类往上追,你追踪追,不停的往上追,追到最后你发现它也是except之类,因此呢,我们这就得出一个结论,什么结论呢,就是你。你的一个看这如果混入该特质的类,就它已经继承了一个一个类,比如A类就它。则要求这个类及这个类必须是特质超内的,这类特质的超累是谁?是exception,就这个关系,你理理理解清楚了吗?好,那么如果你这。继承了这个,这个类不是它的子类,那我告诉大家这个就会报错。你比如说我随便举个例子。我再举个例子,比如说我这里有一个注意听,假如我这有个三,这次我继承一个什么类呢,我随便瞎写一个class CCC。OK,然后我这直接写CCC,同学们可以看到代码就会报错。
10:06
好,所以老师没有报错,运行一下你试试看。你一下试试看对吧,你这方是CCCC它的负类,你知道是谁。Object,它可能就不是一条线了。它就可能不是一条线,当我们运行的时候,我们看会报一个怎样的错误,而它的语法就不让你过。好,我们输出,哈哈,然后我运行一把,请看代码的执行效果。好,可以看到这个代码直接就定位在我们的第37行,报错了,什么意思?他说一个非法的继承,Super CCC is not a sub,不是一个词类,谁的词类呀,Super exception类。明白了,他不允许这么干,因为这样呢,如果说他真的能够假设这种形式能够成立啊,周老师,那你这个这个能,如果这个形式真的成立,那就意味着我们的这个开应该是支成支持多继承的,但本质大家知道Java是单继层机制,开也是实现这个单继层的,如果这个能成立。
11:09
那就说我这个既可以是CC的之类,又可以是三之类,那就打破了这个撕开了,或者叫Java底层的一个单机层的机制,它不允许。那么我们这个编程语言里面,目前真正能够做到多基层的,据据我学习的语言里面只有一个C加加支是支持一点多基层,而且这个多基层还是有很多限制,现在几乎所有的编程语言都是单基层机制,那么为了弥补这个单基层呢?像Java它用的是接口,像我们这个SC用的是什么呢?都用的就是这个去像构语言呢,他用的是结构体,所以他一定在想这些办法解决,OK好不管怎么样,这个代码呢,你这是错的啊,这个是错误的,错误的原因原因是什么呀?CCCCCCCC和和这个啊不是啊啊这样这样写吧,CCC不是。
12:08
不是什么呢,不是这个exception的ex pon的之类。之类,好,那有些同学老师如果我这样做行不行呢?各位同学你看我这样改代码能不能报错exception啊,我exception,各位如果我这么做一把代码能不能通过?能必须能通过了,为什么?因为大家都是一个三分之类嘛,那我就没有出现这个多继承的这种这种乱写的写法,好这样再运行呢,我们看代码就会啪一下就跑了过去。对不对,他就会输出,哈哈。诶,他就哈哈了,把这个代码呢,大家一定要注意这个这个逻辑啊,同学们,同学们就说以后你遇到这个情况,你不要着急,你得看是哪里出了问题。好,这个呢,是我们扩展类特质的又一个说明,好,现在呢,我把这个扩展类的特质给大家做一个简单的板书,我们讲了什么内容呢?讲了这么一点内容哈,东西不多。
13:07
东西不多,但是呢,得得了解一下,那我不说,你将来遇到一些比较复杂的代码,你就可能看不懂了。好,我把这个呢给各位朋友放到这里来啊,标题三对不对,好,刚才我们说的第一点。啊第什么呢?就是特质可以集成的,用来扩展一些扩展该类的功能啊,或者叫扩展这个特质的功能啊,应该叫扩展该呃,不用以扩展该特质啊,应该叫特质更合理一点。因为我这样写也没错,因为特质本身呢,他他他他也看成一个类了啊OK,好,这是一个案例,先把案例给同学们搬过来吧,啊案例啊是比较多的。我把这个案例呢,给同学们板述过来,对吧?很简单一个案例啊,但是呢,能把问题说清楚就是好案例,对吧?好,这是第一个案例,第二个案例呢,我们又讲了一下,就是所有混入该特质,类似它自动成为那个特质所继承的超链之类,比如说我集成exception,那么我这个呢,也就自动成为exception之类了。
14:13
以此类推,好,这个呢,我给同学们再板述一下方注意。好,然后这个案例呢,我也给同学们板书一个啊,板书一份,这个案例呢,就是其实就是这写的。啊,就是哪一型呢,就这些对吧,啊也很简单。把这个呢,给同学们板书到笔记里面来。好,最后我又讲了一个需要同学们在使用的时候注意的一个点,哪里呢?就说如果我们混入了该特质的类,呃,他他又继承了别的类,他还混入了,那这个时候呢,就一定要注意啊,你混你继承这个类呢,需要跟这个呃这个混入的,或者说也是继承这个,这个exception呢,他们是。有相同的屋类,好这个意思,好这个呢,我也给大家反诉过来。
15:02
那这个是,呃,代码呢,我也写到这里啊,代码在哪里呢?代码就是刚才老师写的这一段代码。对,从这开始的,OK,好,那干脆把整个就拿下来吧。与他最后这个案例跟前面都是有关联关系的,所以说我呢也不都说了,好,同学们那关于扩展类的特质,我们就说到这里。
我来说两句