我使用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
添加一个实现,因此默认情况下,每个子类都将具有该实现。