Qual è la differenza tra i due seguenti?Una domanda sui tratti
1 #
trait B extends A {
}
2 #
trait B { self: A =>
}
dove A
è una classe astratta.
> > EDIT:
Si prega di spiegare per quanto riguarda il seguente esempio di Duck
s con volare pluggable e comportamenti 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()
}
}
uscita:
Me può fliez! : D
< < Silenzio >>
Cerca un duplicato di http://stackoverflow.com/questions/2224932/difference-tra between-traheritance-and-self-type-annotation, a sua volta un duplicato di http://stackoverflow.com/questions/1990948/what-is-the-difference-between-scala-self-types-and-trait-sottoclasse – VonC