第十二章 特质

最后更新于:2022-04-01 20:15:58

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