码迷,mamicode.com
首页 > 其他好文 > 详细

Scala multiple inheritance. Mixin order v.s. Super order.

时间:2016-04-10 06:52:05      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

Code is everything:

trait Base1 {
  println("mixing Base1")

  def print() {
    println("Base1")
  }
}

trait A extends Base1 {
  println("mixing A")

  override def print() {
    println("A")
    super.print()
  }
}

trait B extends Base1 {
  println("mixing B")

  override def print() {
    println("B")
    super.print()
  }
}

class Base2 {
  println("mixing Base2")

  def print() {
    println("Base2")
  }
}

/**
  * C extends Base2 with A with B
  * => inheritance linearization
  * step 1: expansion
  * C extends Base2 with Base1 with A with Base1 with B
  * step 2: duplication removal
  * C extends Base2 with Base1 with A with B
  *
  * So the mixin order is:
  * Base2 -> Base1 -> A -> B
  *
  * Super order is:
  * B -> A -> Base1 (because Base1 mixes in after Base2, so it overrides it)
  **/
class C extends Base2 with A with B {
  println("creating C")

  override def print() {
    println("C")
    super.print()
  }
}

object Main extends App {
  (new C).print()
  /*
  Output:

mixing Base2
mixing Base1
mixing A
mixing B
creating C
C
B
A
Base1
    */
}

 

Scala multiple inheritance. Mixin order v.s. Super order.

标签:

原文地址:http://www.cnblogs.com/neweracoding/p/5373298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!