¿Cuál es la diferencia entre los dos siguientes?Una pregunta sobre los rasgos
1 #
trait B extends A {
}
2 #
trait B { self: A =>
}
donde A
es una clase abstracta.
> > EDIT:
Por favor, explique con respecto al siguiente ejemplo de Duck
s con el vuelo enchufable y comportamientos quacking:
abstract class Duck {
def fly(): Unit
def quack(): Unit
def swim() {
println("Woodoowoodoowoodoo...")
}
}
trait FlyingWithWings extends Duck {
override def fly() {
println("Me can fliez! :D")
}
}
trait FlyingNoWay { self: Duck =>
def fly() {
println("Me cannot fliez! :(")
}
}
trait Quack extends Duck {
override def quack() {
println("Quack! Quack!")
}
}
trait MuteQuack { self: Duck =>
def quack() {
println("<<Silence>>")
}
}
class MallardDuck extends Duck with FlyingWithWings with MuteQuack
object Main {
def main(args: Array[String]) {
val duck = new MallardDuck
duck.fly()
duck.quack()
}
}
Salida:
me puedo fliez! : D
< < Silencio >>
Mira un duplicado de http://stackoverflow.com/questions/2224932/difference-between-trait-inheritance-and-self-type-annotation, en sí mismo un duplicado de http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self-types-and-trait-subclasses – VonC