Scala构造顺序 提前定义
来源:互联网 发布:贵金属交易软件排行 编辑:程序博客网 时间:2024/06/09 19:55
package cn.nokia.bigdata/** * Created by fan on 2017/8/6. */object TestApp extends App { val ant: Ant = new Ant() println(ant.range) println(ant.env.length)}class Animal { val range: Int = 10; val env: Array[Int] = new Array[Int](range);}class Ant extends Animal { override val range: Int = 2;}
- Ant在做自己构造器之前,会调用Animal的构造器。
- Animal的构造器将range设为10
- Animal初始化env调用range()取值器
- Ant类重写了range字段还未初始化
- range() 方法返回0 (整形的默认值)
- env被设为长度为0
- Ant 构造器继续执行设为range为2
解决方法
- val 设置为 final
- 超类中将val 设置为lazy加载
- 使用提前预定义方法(在超类的构造器调用之前,初始化子类的val 字段,语法超级难看)
/** * Created by fan on 2017/8/6. */object TestApp extends App { val ant: Ant = new Ant() println(ant.range) println(ant.env.length)}class Animal { val range: Int = 10; val env: Array[Int] = new Array[Int](range);}class Ant extends { override val range: Int = 2;} with Animal
主构造函数中重写
class Ant(override val range: Int = 2) extends Animal {}
阅读全文
0 0
- Scala构造顺序 提前定义
- 提前定义及对象构造顺序
- Scala之旅-提前定义
- Scala重写field的提前定义、Scala继承层级、对象相等性
- Scala讲座:类定义和构造函数
- scala 类定义构造函数与继承
- scala-15Scala多重继承、多重继承构造器执行顺序及AOP实现
- Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
- 提前定义,不然编译器找不到
- 继承(加深)-构造函数调用顺序与函数重定义
- 对于派生类的构造函数,在定义对象时构造函数的执行顺序
- Scala多重继承、多重继承构造器执行顺序及AOP实现
- Scala:基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- 0015.scala的多重继承、多重继承构造器执行顺序、基于trait的AOP实现
- 15.Scala多重继承、多重继承构造器执行顺序及AOP实现
- 构造顺序
- [软件工程]提前完成任务的风险如何定义
- scala中的构造器
- layer iframe层的使用,传参
- json-server+mockjs 模拟REST接口
- [FAQ03426]android 4.4当系统存在多个Launcher时,如何设 置开机自动进入默认的Launcher?
- Javascript 多浏览器兼容性问题及解决方案
- Docker笔记
- Scala构造顺序 提前定义
- Springboot基础篇(二) 简单的增删改查
- HDU 6084 | 2017百度之星资格赛 1005 卡特兰数 + 分块打表
- LeetCode
- TCP协议与UDP协议的区别
- 新路程------imx6的模块编译的Makefile
- Python3.x与Python2.x的区别
- Crossing River
- shell脚本的始末