从scala中的trait扩展的属性中的错误

时间:2015-04-01 11:55:48

标签: java scala

我正在使用scala,我有一个属性"名称"我在Userclass中扩展了这个特性,我正在访问属性
 当我试图在这样的特征中声明名称时

val name : String

在子类没有实现成员的子类中给出了错误 但是当我试着

val name : String = ""
它工作得很好 请告诉我它之前没有工作的区别和原因,以及为什么它在修改后起作用

1 个答案:

答案 0 :(得分:2)

我假设你的代码看起来像这样:

trait hasName {
  val name : String
}

class Person extends hasName

特性本质上是abstract,这意味着它允许使用未实现的方法。实际上,trait声明的是:

  

所有扩展hasName的类都保证具有val name : String实例变量。什么是 中的变量依赖于实际的子类

在上面的例子中,您的代码扩展为:

trait hasName {
  val name : String = ???
}

其中???基本上意味着特定的'功能'没有实现。

修改后:

trait hasName {
  val name : String
}

class Person extends hasName {val name : String = ""}

扩展类Person 会覆盖 hasName特征的实现,或者在这种情况下,缺少它,以及它自己的实现。

或者,如果你这样做:

trait hasName {
  val name : String = ""
}

您正在向hasName添加一个实现,因此默认情况下,每个子类都将具有该实现。