Scala学习第十章 特质
2015-08-22 15:17
162 查看
在Java中,类只能扩展自一个超类,可以实现任意数量的接口,但接口中只能包含抽象类,不能包含字段,
scala提供"特质",而非接口,特质可以同时拥有抽象方法和具体方法,支持部分实现,类可以实现多个特质.
让特质拥有具体行为存在一个弊端.当特质改变时,所有混入了改特质的类都必须重新编译
一般来说特质从最后一个开始被处理
在JVM 中一个类只能扩展一个超类
特质构造顺序:
1.首先调用超类的构造器
2.特质构造器在超类构造器之后,类构造器之前执行
3.特质由左到右被构造
4.每个特质中,父特质先被构造
5.如果多个特质共有一个父特质,如果那个父特质已经被构造,则不会再次构造.
6.所有特质构造完毕,子类被构造
举个例子:
class SavingsAccount extends Account with FileLogger with ShortLogger
构造器将按照如下的顺序执行:
1.Account(超类)
2.Logger(第一个特质的父类)
3.FileLogger(第一个特质)
4.ShortLogger(第二个特质).注意它的父特质Logger已被构造
5.SavingsAccount(类)
特质不能有构造器参数
scala提供"特质",而非接口,特质可以同时拥有抽象方法和具体方法,支持部分实现,类可以实现多个特质.
让特质拥有具体行为存在一个弊端.当特质改变时,所有混入了改特质的类都必须重新编译
一般来说特质从最后一个开始被处理
在JVM 中一个类只能扩展一个超类
特质构造顺序:
1.首先调用超类的构造器
2.特质构造器在超类构造器之后,类构造器之前执行
3.特质由左到右被构造
4.每个特质中,父特质先被构造
5.如果多个特质共有一个父特质,如果那个父特质已经被构造,则不会再次构造.
6.所有特质构造完毕,子类被构造
举个例子:
class SavingsAccount extends Account with FileLogger with ShortLogger
构造器将按照如下的顺序执行:
1.Account(超类)
2.Logger(第一个特质的父类)
3.FileLogger(第一个特质)
4.ShortLogger(第二个特质).注意它的父特质Logger已被构造
5.SavingsAccount(类)
特质不能有构造器参数
相关文章推荐
- Windows下Scala环境搭建
- Windows7下安装Scala 2.9.2教程
- XML 文件解析--含Unicode字符的XML文件
- 分分钟掌握快速排序(Java / Scala 实现)
- Scala极速入门
- Spark初探
- Scala实现REST操作
- Scala method call syntax
- 关于Scala多重继承的菱形问题
- Scala 高阶函数(high-order function)剖析
- Spray.io搭建Rest服务
- Spray.io搭建Rest — 支持Twirl模板并部署
- 搭建hadoop/spark集群环境
- ScalaMP ---- 模仿 OpenMp 的一个简单并行计算框架
- 用Scala实现延迟计算
- SBT学习 [持续更新...]
- Scala创建新的控制结构
- Scala: 一次命令式到函数式的重构
- 浅谈Scala的特质(trait)