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



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

val name : String

它在子类中给出了一个错误,即子类ha是未实现的成员但当我尝试时

val name : String = ""

它工作得很好请告诉我它以前不起作用的区别和原因,以及它在修改

后起作用的原因

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

trait hasName {
  val name : String
}
class Person extends hasName

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

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

在上述情况下,您的代码扩展为:

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

其中CCD_ 5本质上意味着特定的"函数"未实现。

修改后:

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

扩展类Person用自己的实现覆盖了hasName特性的实现,或者在本例中,没有实现。

或者,如果你这样做:

trait hasName {
  val name : String = ""
}

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

最新更新