温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
我们发现在skyla当中,特征的叠加顺序总结起来的话,它就是从右到左按照顺序去做一个叠加啊,那如果要是出现菱形继承或者所谓的钻石问题的时候,那我们还得按照前面的分析考察到底是哪一个在前,哪一个在后,同样最后得出它对应的这个叠加顺序,才能够知道super调用的顺序是什么样的啊,那这里边大家可能就想到了,如果说我不想考虑这么多,我就是想直接指定当前这个super调用的是某一个特征的对应的方法,或者说呃,我这里有可能有继承了父类的呀,继承父类的话,我默认认为super调用的应该是父类的对应的方法,可是这里边我们是从右到左找它最右边的特征去了,那能不能避免这种情况呢?我直接指定要调负类的方法行不行呢?这是可以的,我们在super后边只要加上一个括号,然后把对应的自己想要去调用的副类或者特征的名称在这就可以了,那同样如果要是没有副类,我们上面这个就是混入了两个特质的话,也可以默认从右到左是先调color ball,对应的describe方法,我现在可以直接指定要调ball的方法,完全都是可以的,我们现在如果运行一下的话,大家就会发现。
01:25
上面输出的就是person increase是他负类的increase方法。而下边这里边我们的。描述describe就只有football,就不再有color对应的描述了啊,所以大家看到整个这个特征使用还是非常的灵活,非常的方便的,那所以这里我们可以简单的做一个总结,就是在scale里边我们看到特征和抽象类好像是有点儿像的,因为它里边都可以定义抽象或者非抽象的属性和方法,那这里边我们到底什么时候用特征,什么时候用抽象类呢?
02:03
简单来讲就是优先用特征,因为我们发现了抽象类其实本质还是一个类嘛,我们在使用的过程当中,主要还是用在继承关系里边的啊,就是直接extend一个抽象类作为它的负类,然后实现里边的抽象属性和方法,而特征呢,诶,它是可以扩展多个去做混入的,而且还有更更多的啊,像我们这个叠加顺序之类的比较灵活的应用,所以我们所说的scla是一门单继承多实现的语言,那它的多实现集中就体现在了特征上,所以我们可以优先使用特征啊,它是更加灵活,使用更加的方便的。那什么情况下我们优先要去考虑抽象类呢?啊,那一方面大家知道抽象类毕竟它是代表了当前类型的一个本质特征,特征的提取和抽象啊,所以当我们当前这个类确实是它的一个本质性的东西的时候,我们可以考虑把它包装成抽象类。
03:03
那另外就是抽象类毕竟是类,它是可以定义带参数的构造构造器的,而对于这个特征而言,大家看我们定义的时候。后边是不可能带参数的,不可能加括号,或者说里边传入一些参数的,就类似于Java里边interface的那个定义嘛,啊,那所以这里边就是如果说我们想要对于当前的这一个特征或者抽象类啊,想要去给他参数的时候,那还是得优先使用抽象类啊,就是关于特征和抽象类的一个区别和总结。
我来说两句