Scala多重继承及AOP

 1 package traitandclass
 2
 3 /**
 4   * Created by zhen on 2018/8/23.
 5   */
 6 class Human {
 7   println("Human")
 8 }
 9 trait Teacher extends Human{
10   println("Teacher")
11   def teach
12 }
13 trait Player extends Human{
14   println("Player")
15   def play = {println("I‘m playing games!")}
16 }
17 // 继承Human类,混入Teacher和Player特质
18 class GameTeacher extends Human with Teacher with Player{
19   override def teach = {println("I‘m teach students how to play games!")}
20 }
21
22 //AOP
23 trait Action{
24   def doAction
25 }
26 trait BeforeAfter extends Action{
27   abstract override def doAction{
28     println("Initial...")
29     super.doAction
30     println("Destroyed")
31   }
32 }
33 class Work extends Action{
34   override def doAction = println("Working...")
35 }
36 object Test{
37   def main(args: Array[String]) {
38     val gameTeacher = new GameTeacher
39     gameTeacher.play
40     gameTeacher.teach
41     val overrideTeacher = new Human with Teacher with Player{
42       override def teach = {println("I‘m teach students how to play games!")}
43     }
44     overrideTeacher.play
45     overrideTeacher.teach
46     //测试AOP,混入BeforeAfter
47     val work = new Work with BeforeAfter
48     work.doAction
49   }
50 }

结果:

原文地址:https://www.cnblogs.com/yszd/p/9525068.html

时间: 2024-11-05 13:30:30

Scala多重继承及AOP的相关文章

关于Scala多重继承的菱形问题

在Scala中的trait中引入了混入的概念,即Mixin of trait. 什么是混入(mixin) 可能翻译不准确,有人也称之为混入类(mixins),混入是一种组合的抽象类,主要用于多继承上下文中为一个类添加多个服务,多重继承将多个 mixin 组合成一个类.例如,如果你有一个类表示"马",你可以实例化这个类来创建一个"马"的实例,然后通过继承像"车库"和"花园"来扩展它,使用 Scala 的写法就是: val myH

大数据系列修炼-Scala课程05

Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实现 多重继承构造器执行顺序:多重继承构造器执行顺序是从左到右按次序执行,如果前面类以及被继承实现了,后面的类就没有必要去实现,父类只需执行一次 object triatScala { def main(args: Array[String]): Unit = { val t1 = new Piano

scala 15 多重继承 AOP实现

DT大数据梦工厂scala的所有视频.PPT和代码在百度云盘的链接:http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group <Scala深入浅出实战初级入门经典视频课程>http://edu.51cto.com/lesson/id-66538.html <Scala深入浅出实战中级进阶经典视频课程>http://edu.51cto.com/lesson/id-6713

[Scala基础系列 08]Scala继承、抽象类、接口trait以及AOP实现

1.继承 和java一样,scala采用extends关键字继承基类.代码实例如下: /** * Created by molyeo on 2015/8/11. */ class Person(val name: String, var age: Int) { println("The primary constructor of Person") val school = "BJU" def sleep = "8 hours" override

从大数据菜鸟走上大师的历程 Scala 第十三讲 AOP

原视频教程中多重继承相对比较好理解,主要AOP切面编程过程需要好好理解以下是具体实例: trait Action { def doAction } trait BeforeAfter extends Action {   abstract override def doAction   {     println("before...")     super.doAction     println("after...")   }  } class Dog exte

Scala AOP

trait Action { def doAction } trait TBeforeAfter extends Action { abstract override def doAction { println("Initialization") super.doAction println("Destroyed") } } class Work extends Action{ override def doAction = println("Worki

新书:Scala语言基础与开发实战

大数据科学丛书系列的最新一本<Scala语言基础与开发实战>即将面市,预计月底上架.内容还是不错的,文笔简介,内容实用,值得学.用. 大数据资深培训师王家林新作. 详细介绍大数据开发语言Scala及其在分布式框架Akka和Kafka中的应用. 秉承"实战"类图书特点,解析大量代码的编写操作,具有较强的可操作性,便于读者学习和理解. 算上再过几个月出版的<Spark内核解析及性能调优>,一年时间,大数据科学丛书系列之Spark的小套系基本形成了:从学习Spark的

scala习题精选100道

1.**[primary]**关于和Scala进行交互的基本方式REPL说法错误的是? C A.R 读取(read)B.E 求值(evaluate)C.P 解析(Parse)D.L 循环(Loop) 2.**[primary]**不属于Scala7种数值类型的是? D A.CharB.IntC.FloatD.LongLong 3.**[primary]**如果需要使用scala库中的sqrt函数,如sqrt(2),下列引用包的方式错误的是? B A.import scala.math._B.im

scala class和object,trait的区别

Scala类 1 2 3 4 5 6 7 8 9 10 11 12 13 class Counter {   private var value = 0 // 必须初始化字段   def increment() { value += 1 } // 方法默认公有   def current = value // 调用必须是myCounter.current这种风格 } class Student{    var age=20     //底层编译器会自动为私有的age添加get和set的公有方法,