scala/ScalaBook/chapter-03/mixinA.scala
class Person {
var name = "Mitsos"
var _height: Int = 180
def hasItem(key:Int): Boolean =
if (key == 1)
true
else
false
def height = _height
}
trait Door {
def canOpen(p: Person) : Boolean =
return true
def canPass(p: Person) : Boolean =
return true
}
trait Locked extends Door {
override def canOpen(p: Person): Boolean = {
if (!p.hasItem(theKey)) {
println("You don't have the Key")
return false
}
println("Using key...")
return super.canOpen(p)
}
}
trait Short extends Door {
override def canPass(p: Person): Boolean = {
if (p.height > 180) {
println("You are too tall")
return false
}
println("Ducking into door...")
return super.canPass(p)
}
}
class LockedDoor extends Door with Locked { }
class ShortDoor extends Door with Short { }
class LockedShortDoor extends Door with Locked with Short { }
var key:Int = 1
var theKey: Int = 2