package traitandclass

 /**
* Created by zhen on 2018/8/23.
*/
class Human {
println("Human")
}
trait Teacher extends Human{
println("Teacher")
def teach
}
trait Player extends Human{
println("Player")
def play = {println("I'm playing games!")}
}
// 继承Human类,混入Teacher和Player特质
class GameTeacher extends Human with Teacher with Player{
override def teach = {println("I'm teach students how to play games!")}
} //AOP
trait Action{
def doAction
}
trait BeforeAfter extends Action{
abstract override def doAction{
println("Initial...")
super.doAction
println("Destroyed")
}
}
class Work extends Action{
override def doAction = println("Working...")
}
object Test{
def main(args: Array[String]) {
val gameTeacher = new GameTeacher
gameTeacher.play
gameTeacher.teach
val overrideTeacher = new Human with Teacher with Player{
override def teach = {println("I'm teach students how to play games!")}
}
overrideTeacher.play
overrideTeacher.teach
//测试AOP,混入BeforeAfter
val work = new Work with BeforeAfter
work.doAction
}
}

结果:

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

  1. scala 学习笔记(06) OOP(下)多重继承 及 AOP

    一.多继承 上篇trait中,已经看到了其用法十分灵活,可以借此实现类似"多重继承"的效果,语法格式为: class/trait A extends B with C with D ...

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

    Scala多重继承.构造器的执行顺序.AOP实现 多重继承的trait实现:Scala中接口可以继承具体的类,trait接口可以实现多重继承,并且某个类也可以继承特定的类,在继承后面可以混入,接口的实 ...

  3. Scala零基础教学【1-20】

    基于王家林老师的Spark教程——共计111讲的<Scala零基础教学> 计划在9月24日内完成(中秋节假期之内) 目前18号初步学习到25讲,平均每天大约完成15讲,望各位监督. 初步计 ...

  4. Scala AOP

    trait Action { def doAction } trait TBeforeAfter extends Action { abstract override def doAction { p ...

  5. 用特征来实现混入(mix-in)式的多重继承

    用特征来实现混入(mix-in)式的多重继承 Scala里相当于Java接口的是特征(Trait).Trait的英文意思是特质和性状(本文称其为特征),实际上他比接口还功能强大.与接口不同的是,它还可 ...

  6. Scala快速概览

    IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...

  7. 关于Scala的一些感想(一)

    最近在完成自己的开源项目Application-center的时候,使用了Scala编程语言. 在使用了一段时间下来以后,有一些不是很"清晰"的感受,说实话我自己还没有很好的整理清 ...

  8. Scala HandBook

    目录[-] 1.   Scala有多cool 1.1.     速度! 1.2.     易用的数据结构 1.3.     OOP+FP 1.4.     动态+静态 1.5.     DSL 1.6 ...

  9. scala 学习笔记(05) OOP(中)灵活的trait

    trait -- 不仅仅只是接口! 接上回继续,scala是一个非常有想法的语言,从接口的设计上就可以发现它的与众不同.scala中与java的接口最接近的概念是trait,见下面的代码: packa ...

随机推荐

  1. inception安装使用

    一个集审核.执行.备份及生成回滚语句于一身的MySQL自动化运维工具,由去哪网开源 安装 CentOS 7 Python 3.6 安装基础环境 yum -y install cmake libncur ...

  2. python买卖股票的最佳时机--贪心/蛮力算法简介

    开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...

  3. 05-TypeScript中的方法新功能(下)

    再TypeScript中,方法还有一些新功能能够让我们更好的控制方法执行. 1.Generator方法: yield关键字用于控制方法在执行的时候暂停住,后续方法调用方又可以从暂停的地方继续执行,这种 ...

  4. php -- 目录、路径、磁盘

    ----- 028-dir.php ----- <!DOCTYPE html> <html> <head> <meta http-equiv="co ...

  5. 项目实战安装工具箱Busybox

    1.Busybox是一个集成了100多个最常用Linux命令的软件工具箱,他在单一的可执行文件中提供了精简的UNIX工具集.该工具箱中包含了常见简单实用的工具如cat.echo.grep.find.m ...

  6. Java并发编程笔记之PriorityBlockingQueue源码分析

    JDK 中无界优先级队列PriorityBlockingQueue 内部使用堆算法保证每次出队都是优先级最高的元素,元素入队时候是如何建堆的,元素出队后如何调整堆的平衡的? PriorityBlock ...

  7. Java并发编程笔记之ReentrantLock源码分析

    ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞后放入该锁的AQS阻塞队列里面. 首先我们先看一下ReentrantLock的类图结构,如下图所示 ...

  8. leetcode — 4sum

    import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * Source : https://oj.l ...

  9. 进程间通信IPC-信号

    1,signal-ANSI C信号处理 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal ...

  10. JAVAEmail工具错误java.lang.ClassNotFoundException: javax.activation.DataSource

    JDK9以上或JDK6以下使用mail.jar包不加JAF的activation.jar包会抛出该错误!JDK6以上不需要加该jar包: 参考原文 https://stackoverflow.com/ ...