Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
来源:互联网 发布:网络防火墙品牌 编辑:程序博客网 时间:2024/04/30 11:34
1、这讲内容对做大型项目十分重要,trait本身可以有方法的实现,这样做大型工程的具体模块时,可以让这个模块混入很多不同trait,以实现这个模块功能的不同方面。
2、 PianoTeacher的构造顺序是由左往右构造的,但是已经构造了父类,后面子类的父类不会重复构造。例如TTeacher PianoPlayer继承了Human,因为Human已经被构造,所以后面只构造TTeacher、PianoPlayer本身。
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 trianing student...") // 这里必须复写,否则无法构造对象PianoTeacher } object UserTrait { def main(args: Array[String]): Unit = { //方法一 val t1 = new PianoTeacher /** * 构造时结构为: * Human * TTeacher * PianoPlayer */ t1.playPiano //row result: I'm playing piano.... t1.teach //row result: I'm trianing student... println("------------------------------------------") //方法二 匿名类 val t2 = new Human with TTeacher with PianoPlayer{ override def teach = println("I'm teaching student...") } /** * 这种方式类似于Java中定义匿名实现接口的类的简化方式 * new Interface({ * @Override * public void fun(){ * //to do something * } * }); */ t2.playPiano t2.teach /** * 结果为: * Human TTeacher PianoPlayer I'm playing piano.... I'm teaching student... */ } } /** * Scala中的实现AOP */ trait Action{ def doAction } trait TBeforeAfter extends Action{ /*注意 doAction虽然被复写 但仍然是abstract方法 因为super.doAction并未实现 所以用abstract关键字标识*/ abstract override def doAction { println("Initialization") super.doAction println("Destroyer") } } class Work extends Action{ override def doAction = println("Working...") } object AOP { def main(args: Array[String]): Unit = { val w = new Work with TBeforeAfter //这里work实现了doAction,所以成功执行。 w.doAction /** * result: * Initialization * Working... * Destroyer */ } }
0 0
- Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
- scala-15Scala多重继承、多重继承构造器执行顺序及AOP实现
- Scala多重继承、多重继承构造器执行顺序及AOP实现
- 15.Scala多重继承、多重继承构造器执行顺序及AOP实现
- 0015.scala的多重继承、多重继承构造器执行顺序、基于trait的AOP实现
- Dt大数据梦工厂王家林老师 Scala实战详解之第15讲 Scala多重继承、多重继承构造器执行顺序及AOP实现
- Scala:基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- scala学习笔记之 scala多重继承中的混入顺序和对象调用顺序说明
- 多重继承构造函数执行顺序
- 多重继承构造函数执行顺序
- 多重继承构造函数执行顺序
- c++多重继承的构造执行顺序
- 基于trait的多重继承构造器的执行顺序、基于trait的AOP实践
- 多重继承-构造函数与析构函数执行顺序
- Scala讲座:混入多重继承、类型层次和集合
- 多重继承的构造函数和析构函数的执行顺序(包含虚基类)
- java实现多重继承
- 实现多重继承
- div滚动条设置
- 使用OpenCV 实现多摄像头图像处理笔记(1):DirectShow的配置过程可能出现的问题
- swift学习笔记-3
- MongoDB MapReduce学习笔记
- log4jdbc记录全部SQL日志
- Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
- linux学习教程(三) 文件权限处理命令
- 轻量级 Java Web 框架技术选型
- Android平台Camera实时滤镜实现方法探讨(三)--通过Shader实现YUV转换RBG
- 新安装的MySQL必须调整的10项配置(转)
- java 内存溢出
- oracle 定时运行存储调度 schedule job,传递参数 及相关
- iOS 开发中让你的App只能竖屏显示
- ANDROID开发之SQLite详解