scalaエッセイ(3)traitとtraitの衝突解決


traitは抽象クラスに類似することができ、ドメインと方法は定義されても抽象的でもよい.
traitは一般的に単一の機能を表し、
複数のtraitを参照する場合、同じ値またはメソッドが存在する場合、競合を人為的に解決する必要があります.
コンフリクト問題
 
    
  1. trait A {
  2. var x =13;
  3. def f = x+12
  4. }
  5. trait B {
  6. def x =14;
  7. def f =x*12
  8. val c =123
  9. }
  10. class C extends A with B {
  11. }
  12. object EnumerationColor {
  13. def main(args: Array[String]): Unit = {
  14. println( new C().x)
  15. println( new C().f)
  16. }
  17. }

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 {

 
    
  1. trait A {
  2. var x =13;
  3. def f = x+12
  4. val c = 23
  5. }
  6. trait B {
  7. def x =14;
  8. def f =x*12
  9. val c =123
  10. }
  11. class C extends A with B {
  12. override val x= super[A].x +super[B].x+ c
  13. override val f= super[B].f
  14. override val c: Int = 12
  15. }
  16. object EnumerationColor {
  17. def main(args: Array[String]): Unit = {
  18. println( new C().x)
  19. println( new C().f)
  20. }
  21. }
:super[A] , 。 def