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被构造完成之后 才会构造本类的构造函数
  • 相关阅读:
    SetROP2
    JOIN
    Delphi深度探索之PItemIDList的基本概念
    访问网络资源示例
    AVICAP 中文
    AVICAP (全)
    摄像头(简介)
    以远程计算机上的用户身份访问Com+应用
    非匿名方式访问远程的com+
    三层控件基础知识
  • 原文地址:https://www.cnblogs.com/walxt/p/12182909.html
Copyright © 2011-2022 走看看