Scala:基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
来源:互联网 发布:mysql 表空间查看 编辑:程序博客网 时间:2024/04/30 08:08
多重继承
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
- Scala Trait 的线性化
- Scala 有趣的Trait
- Scala的Trait
- Scala的trait
- scala的trait
- scala的继承、组合与特质trait
- trait 继承的Demo
- scala-15Scala多重继承、多重继承构造器执行顺序及AOP实现
- Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
- Scala之Trait的使用
- scala的trait之我见
- 利用scala的trait特性实现简单AOP
- php trait 简明教程,多重继承的实现方案
- Scala多重继承、多重继承构造器执行顺序及AOP实现
- “儿童”计算器
- Gym 100712I Bahosain and Digits(枚举)
- Majority Number II
- 原型模式
- POJ 1753 Flip Game(BFS)
- Scala:基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- C++中模板类使用友元模板函数
- 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程
- linux下apache绑定多个域名
- 设计模式--命令模式
- linux /etc/init.d/ rc*.d 详解
- X命名空间
- viewpager的圆点指示器
- iOS开发-使用storyboard实现UILabel的自适应高度(iOS8)