zoukankan      html  css  js  c++  java
  • scala 构造函数执行顺序

    package com.swust.learn

    object Traitshunxu extends App{
    trait Logger{
    println("Logger")
    }
    trait FileLogger extends Logger{
    println("FileLogger")
    }
    trait Closable{
    println("Closeable")
    }
    class Person{
    println("Constructing...")
    }
    class Student extends Person with FileLogger with Closable{
    println("Constructing...")
    }
    new Student
    }
    //结果分析
    程序首先执行的是直接父类Person的构造函数,由于混入的第一个trait FileLogger扩展自Logger
    因此他会先调用Logger的构造函数 然后在调用 FileLogger的构造函数 完成后在调用Closable的构
    造函数 最后才会执行Student类自身的构造函数,从而完成对象的创建
    //在scala中实际的构造函数是按照以下的顺序进行执行的
    如果有超类 则先调用超类的函数
    如果混入的trait有父trait 他会按照继承的层次先调用父trait的构造函数
    如果有多个父trait 则按照从左到右的顺序执行
    当所有的父类构造函数和父trait被构造完成之后 才会构造本类的构造函数
  • 相关阅读:
    python高级 之(三) --- 高阶函数
    python高级 之(二) --- 类装饰器
    python高级 之(一) --- 函数类型
    jQuery
    css
    html
    px2rem
    keep-alive标签
    rem适配方案2(flexible.js)
    媒体查询
  • 原文地址:https://www.cnblogs.com/walxt/p/12182909.html
Copyright © 2011-2022 走看看