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定义的才能用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值