15.Scala多重继承、多重继承构造器执行顺序及AOP实现

一、多重继承的trait代码实战

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 AOP_15 extends App{
 
 val t1 = new PianoTeacher
 t1.playPiano
 t1.teach
}

输出:

Human
TTeacher
PianoPlayer
I'm playing piano
I'm training students.

3.基于trait的AOP代码实战

trait Action{
  def doAction
}

trait TBeforeAfter extends Action{
  abstract override def doAction{   //注意这里的修饰符abstract和override,因为下面的super.doAction是抽象的
    println("Initialization")
    super.doAction
    println("Destroyed")
  }
}

class Work extends Action{
  override def doAction = {
    println("working")
  }
}

object AOP_15 extends App{
  val work = new Work with TBeforeAfter
  work.doAction
}

 

输出:

Initialization
working
Destroyed


参考资料来源于 DT大数据梦工厂Scala零基础实战经典第15课 由王家林老师讲解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值