在scala中除了对象(object)以外,其他的单位例如,类,特质等都有构造器,在这么多种的构造器中,在程序执行的过程中,构造器也有其特定的执行过程,具体的执行顺序如下:
1、首先调用超类的构造器
2、特质构造器在超类构造器之后,类构造器之前执行
3、特质构造器由左到右被构造
4、在每个特质构造器中,父构造器先于子构造器被构造
5、如果有多个特质共有一个父特质,那么这个父特质构造器一旦被构造,则不会被再次构造,至于这个父构造器是由哪个特质第一次进行构造的,这一点取决于程序中调用特质的类中的特质的顺序,在scala中,特质的执行顺序一般是按照程序中的书写顺序从最后一个开始。(添加多个相互调用的特质时,在书写程序逻辑时,要特别进行注意)
6、所有的特质被构造完成以后,类开始进行构造
具体事例如下所示:
trait Logger{}
trait ShortLogger extends logger{}
trait TimestampLogger extends logger{}
class Account{}
class SaveLogger extends Account with TimestampLogger with ShortLogger {}
上段代码中,构造顺序为:
1、Account(超类)
2、Logger(父特质)
3、TimestampLogger(特质,按照从左到右的顺序)
4、ShortLogger(特质,按照顺序)
5、SaveLogger(类,最后一个)
构造器的顺序是类的线性化的反向