博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala学习第十五天 Scala多重继承、多重继承构造器执行顺序及AOP实现
阅读量:2200 次
发布时间:2019-05-03

本文共 2384 字,大约阅读时间需要 7 分钟。

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 */ } }

转载地址:http://drrub.baihongyu.com/

你可能感兴趣的文章
为什么需要 Mini-batch 梯度下降,及 TensorFlow 应用举例
查看>>
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>
Java并发指南1:并发基础与Java多线程
查看>>
Java并发指南2:深入理解Java内存模型JMM
查看>>
Java并发指南5:JMM中的final关键字解析
查看>>
Java并发指南6:Java内存模型JMM总结
查看>>
Java并发指南7:JUC的核心类AQS详解
查看>>
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>