- 特质(trait)是Scala里代码复用的基础单元,特质封装了方法和字段的定义,并可以通过混入到类中重用它们。
- 特质是如何工作的
- 关键字 tarit 来定义特质
- 一旦定义了就可以使用extends或with关键字,将其混入类中
- 特质类型的变量可以被任何混入该特质的类对象初始化
- 使用关键字 with 可以混入多个特质,只混入一个特质时,用关键字 extends
- 特质与类的不同
- 特质不能有任何“类”参数,即传递给类的主构造器的参数
- 特质的super是动态绑定的,定义特质时,super调用的方法实现尚未被定义,每次被混入到具体的类中才会被决定
- Scala在特质中添加一次方法,在混入它的类中就不需要重新实现它
- 特质的堆叠
- 给代码带来了极大的灵活性
- 与多重继承的差别
- super方法的调用是由类和被混入到类的特质的线性化所决定的
- 对于多重继承来说,super调用导致的方法调用可以在调用发生的地方明确决定
- 何时用特质 要实现一个可重用的行为集合时,必须决定是使用特质还是抽象类
- 如果行为不会被重用,那么久把它做成具体类,具体类没有可重用的行为
- 如果要在多个不相关的类中重用,就做成特质,只有特质可以混入到不同的类层级中
- 如果希望从Java代码中继承,就使用抽象类
- 如果计划以编译后的方式发布,并且希望外部组织能够写一些继承自它的类,那么使用抽象类会更好一些
- 如果效率非常重要,则应该倾向于使用类
- 如果还是不知道。。。。那么就使用特质吧!