首页 > 其他 > 详细

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

时间:2016-04-10 06:49:05      阅读:316      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!