初始化trait的抽象字段:

trait Logged {
println("Logged constructor")
def log(msg: String){ println("Logged")}
} trait FileLogger extends Logged {
var filename: String
override def log(msg: String) {
println("filename:" + filename)
} }

在trait中定义了抽象字段我们应该如何初始化他呢?

如果我们简单的在类中覆盖,由于trait构造在类构造之前运行,所以无法初始化filename。那怎么办呢?

方法有三种:

前两种属于预先定义

class SavingFile extends { var filename = "hello"} with FileLogger{

}
      new SavingFile().log("")
(new {var filename = "hello"} with Account() with FileLogger).log("")

运行结果:

Logged constructor
FileLogger constructor
SavingFile constructor
filename:hello
Account constructor
Logged constructor
FileLogger constructor
filename:hello

第三种:因为动态继承trait,是在类构造之后进行,所以可以如下操作:

class AccountTest {
println("AccountTest constructor")
var filename = "hello"
} (new AccountTest() with FileLogger).log("")

运行结果:

AccountTest constructor
Logged constructor
FileLogger constructor
filename:hello

最新文章

  1. linux安装tomcat
  2. mongodb基本操作的学习
  3. 13.linux中断处理程序
  4. GPS部标平台的架构设计(一)
  5. iOS 微信支付
  6. iOS7 中的新加入的下载类NSURLSession(随ios版本更新而更新)
  7. LeetCode Subsets (DFS)
  8. 关于String的hashCode
  9. Niagara技术文档汇总
  10. elasticsearch最佳实践
  11. 《R包的分类介绍》
  12. [Hadoop] - Protocol Buffer安装
  13. Windows 10 & React Native & Android
  14. 环境与工具2:建立高效的mac环境
  15. go test 测试用例那些事
  16. EOS开发基础之六:使用cleos命令行客户端操作EOS——智能合约之eosio.msig和eosio.system
  17. 【LCA+MST】BZOJ3732-Network
  18. 教你在Android手机上使用全局代理
  19. tomcat服务器访问网址组成
  20. tomcat 禁用access.log

热门文章

  1. 牛客暑假多校 F RIKKA with Line Graph
  2. 【Nginx】基础学习概览【汇总】
  3. if __name__ = "main" 解释
  4. Java日志之Slf4j,Log4J,logback原理总结
  5. Storm 系列(六)—— Storm 项目三种打包方式对比分析
  6. springCloud相关学习资料
  7. SpringBoot启动原理
  8. Python中使用python -m pip install --upgrade pip升级pip时老是不成功
  9. Winform中将Bitmap对象通过picture显示图片
  10. 新建Servlet工程——IDEA