scalaエッセイ(3)traitとtraitの衝突解決
traitは抽象クラスに類似することができ、ドメインと方法は定義されても抽象的でもよい.
traitは一般的に単一の機能を表し、
複数のtraitを参照する場合、同じ値またはメソッドが存在する場合、競合を人為的に解決する必要があります.
コンフリクト問題
traitは一般的に単一の機能を表し、
複数のtraitを参照する場合、同じ値またはメソッドが存在する場合、競合を人為的に解決する必要があります.
コンフリクト問題
trait A {
var x =13;
def f = x+12
}
trait B {
def x =14;
def f =x*12
val c =123
}
class C extends A with B {
}
object EnumerationColor {
def main(args: Array[String]): Unit = {
println( new C().x)
println( new C().f)
}
}
Error:(20, 7) class C inherits conflicting members:
variable x in trait A of type Int and
method x in trait B of type => Int
(Note: this can be resolved by declaring an override in class C.);
other members with override errors are: f
class C extends A with B {
。
trait A {
var x =13;
def f = x+12
val c = 23
}
trait B {
def x =14;
def f =x*12
val c =123
}
class C extends A with B {
override val x= super[A].x +super[B].x+ c
override val f= super[B].f
override val c: Int = 12
}
object EnumerationColor {
def main(args: Array[String]): Unit = {
println( new C().x)
println( new C().f)
}
}
:super[A] , 。 def