我正在使用scala,我有一个属性"名称"我在Userclass中扩展了这个特性,我正在访问属性
当我试图在这样的特征中声明名称时
val name : String
在子类没有实现成员的子类中给出了错误 但是当我试着
val name : String = ""
它工作得很好
请告诉我它之前没有工作的区别和原因,以及为什么它在修改后起作用
答案 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
添加一个实现,因此默认情况下,每个子类都将具有该实现。