基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
来源:互联网 发布:程序怎么变成软件 编辑:程序博客网 时间:2024/05/18 02:25
多重继承
package kmust.hjr.learningScala15/** * Created by Administrator on 2015/7/20. */class Human{ println("Human")}trait TTeacher extends Human{ println("TTeacher") def teach}trait PianoPlayer extends Human{ println("PianoPlayer") def playPiano={println("I'm playing piano.")}}class PianoTeacher extends Human with TTeacher with PianoPlayer{ override def teach={println("I'm training students. ")}}
实例一
object UseTrait { def main(args:Array[String]): Unit ={ val t1=new PianoTeacher t1.playPiano t1.teach }}
**说明(1):**class PianoTeacher extends Human with TTeacher with PianoPlayer{...}的构造顺序为:**从左向右**。即:先构造Human ,在构造TTeacher ,之后构造PianoPlayer。
说明(2):在构造TTeacher的时候,发现它的父类Human已经被构造,就不会再重复构造(这是Scala特有的),同理,构造TTeacher的时候,发现它的父类Human已经被构造,则不必重复构造。
实例二
object UseTrait { def main(args:Array[String]): Unit ={ val t1=new PianoTeacher t1.playPiano t1.teach val t2= new Human with TTeacher with PianoPlayer{ def teach={println("I'm teaching students.")} } t2.playPiano t2.teach }}
AOP
package kmust.hjr.learningScala15/** * Created by Administrator on 2015/7/20. *//*AOP*/trait Action{ def doAction}trait TBeforeAfter extends Action{ abstract override def doAction: Unit ={ println("Initialization") super.doAction println("Destroyed") }}class Work extends Action{ override def doAction=println("Working...")}
object UseTrait { def main(args:Array[String]): Unit ={ val work=new Work with TBeforeAfter work.doAction }}
完整代码
package kmust.hjr.learningScala15/** * Created by Administrator on 2015/7/20. */class Human{ println("Human")}trait TTeacher extends Human{ println("TTeacher") def teach}trait PianoPlayer extends Human{ println("PianoPlayer") def playPiano={println("I'm playing piano.")}}class PianoTeacher extends Human with TTeacher with PianoPlayer{ override def teach={println("I'm training students. ")}}/*AOP*/trait Action{ def doAction}trait TBeforeAfter extends Action{ abstract override def doAction: Unit ={ println("Initialization") super.doAction println("Destroyed") }}class Work extends Action{ override def doAction=println("Working...")}object UseTrait { def main(args:Array[String]): Unit ={ /* val t1=new PianoTeacher t1.playPiano t1.teach val t2= new Human with TTeacher with PianoPlayer{ def teach={println("I'm teaching students.")} } t2.playPiano t2.teach*/ val work=new Work with TBeforeAfter work.doAction }}
附件 :
0 0
- Scala:基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- 基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- 0015.scala的多重继承、多重继承构造器执行顺序、基于trait的AOP实现
- php 多重继承的替代方案trait
- trait 继承的Demo
- php trait 简明教程,多重继承的实现方案
- c++多重继承的构造执行顺序
- scala的继承、组合与特质trait
- PHP 5.4 的 Trait 特性_实现类的多重继承
- Scala Trait 的线性化
- Scala 有趣的Trait
- Scala的Trait
- 0014.trait的混入
- Scala的trait
- php的trait特性
- scala的trait
- trait的使用心得
- Scala多重继承、多重继承构造器执行顺序及AOP实现
- Zeroc Ice TCP长连接 实现推送功能
- UML类图实例
- 程序员面试金典第一章:数组与字符串(8) 翻转子串
- Android环境搭建
- node.js学习资源
- 基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- linux学习笔记--mpstat命令
- java form 表单多种提交 (有无文件上传)
- 记录文本框内容的动态变化
- bootstrap_fileinput 上传组件的简单使用
- Android 系列 1.4学习Java语言
- 今天提示MyEclipse Trial Expired,如何手动获取MyEclipse 注册码!很牛!
- PyQt5学习随笔
- 104. Maximum Depth of Binary Tree