scala之trait理解
来源:互联网 发布:emacs26 for windows 编辑:程序博客网 时间:2024/06/14 03:26
核心内容:
1、混入特质trait的3种方式
2、多重继承构造器执行顺序
3、基于trait的AOP代码实战
1、混入特质的3种方式以及多重继承构造器的执行顺序
1、除了在类定义中混入特质以外,还可以在特质定义中混入特质以及在对象构造时混入特质
(注意:创建对象时混入特质,要重写trait中的抽象方法 )
2、特质的构造是有顺序的,从左到右依次构造,并且父类构造器不重复构造
构造器按如下顺序构造:
(1)超类
(2)父特质
(3)第一个特质
(4)第二个特质(父特质不重复构造)
(5)类
如果class A extends B1 with B2 with B3….
那么,串接B1、B2、B3…等特质,去掉重复项且右侧胜出
实例程序1:在类定义中混入特质并分析构造器的执行顺序
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
程序的运行结果:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
对于上面这个程序,用我们上面构造器的执行顺序来分析的话,构造器的执行顺序为:
实例程序2:在构造对象时混入特质并分析构造器的执行顺序
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
运行结果:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
构造器的执行顺序:
1、特质的另一个应用方面在于:为类提供可堆叠的改变(super保留字)
当为类添加多个互相调用的特质时,从最后一个开始进行处理
在类中super.foo()这样的方法调用是静态绑定的,明确是调用它的父类的foo()方法
在特质中写下了super.foo()时,它的调用是动态绑定的。调用的实现将在每一次特质被混入到具体类的时候才被决定
因此,特质混入的次序的不同其执行效果也就不同
实例程序:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
运行结果:
- 1
- 2
- 3
- 1
- 2
- 3
如有问题,欢迎留言指正!
参考网址:
1、http://blog.csdn.net/hwssg/article/details/37810095
2、http://blog.csdn.net/expt/article/details/782609
- scala之trait理解
- scala学习之:trait的理解
- Scala 之 trait 关键字
- Scala之特质Trait
- Scala之trait
- Scala之Trait的使用
- scala学习记录之trait
- scala学习之特质(trait)
- scala基础之特质trait
- scala的trait之我见
- Scala:trait
- Scala Trait
- Scala Trait
- Scala-trait
- Scala 学习之 Class,Object, Trait
- scala学习13之与trait同名的object对象
- Scala学习—面向对象编程之Trait
- scala中的trait
- 前后端路由
- css未盒子div居中的多种方法
- Lucene入门
- 选择排序算法(Selection Sort)
- Eclipse10个最有用的快捷键
- scala之trait理解
- 【数据结构】Bloom Filter
- ThoughtWorks、Teambition、Trello、Slack、DevCloud 主流敏捷软件开发工具平台比较
- 我的智能家庭----开篇
- 【JZOJ2156】【2017.7.10普及】复仇者vsX战警之训练
- Git 出现502错误 完美解决办法
- Hybrid APP之Native和H5页面交互原理
- 引导页
- 【今日荐文】聊聊成为大神路上的过程---伯乐在线/PleaseCallMeCoder