特质的构造顺序
1. 超类的构造器
2. 特质由左至右构造
3. 每个特质中,父特质先被构造
4. 多个特质公用一个父特质,而那个特质已经被构造,则不会被再次构造
5. 所有特质构造完毕,子类被构造
eg: 其中 FileLogger
和ShortLogger
都继承Logger
特质
1 | calss SavingsAccount extends Account with FileLogger with ShortLogger |
构造顺序
1.Account(超类)
2.Logger(第一个特质的父特质)
3.FileLogger(第一个特质)
4.ShortLogger(第一个特质)
5.SavingAccount(类)
JVM中的特质
由于scala在jvm中运行,所以scala需要将特质翻译为JVM的类与接口
只有抽象方法的特质被简单的翻译成一个Java接口
1 | trait Logger{ |
被翻译为
1 | public interface Logger{ |
如果特质中有具体的方法,Scala会创建出一个伴生类,伴生类用静态方法
存放特质的方法。
1 | trait ConsoleLogger extends Logger { |
被翻译成
1 | public interface ConsoleLogger extends Logger{ |
以及一个和ConsoleLogger接口对应的伴生类
1 | public class ConsoleLogger$class{ |