Scala中的Trait和Case Class中的相同类数据成员名称

时间:2016-03-29 15:33:14

标签: scala

如果我有特质:

 trait Person
 {
    val name: String
 }

然后是一个案例类:

 case class Student(val name: String) extends Person
 {
     ......   
 }

这两个“名字”是一回事吗?如果我将值传递给学生的​​“名称”字段,我可以通过人名来访问此值吗?我猜不会。或学生的“名字”会覆盖人名?我想我只能通过学生课程访问学生的姓名。

1 个答案:

答案 0 :(得分:1)

您正在使用Student类中的字段覆盖Person trait中的抽象字段,因此您的猜测是正确的。

您可能需要考虑一些小的变化。 您可以将特征中的抽象定义设为“def”。这使您在覆盖方面具有更大的灵活性,请参阅https://stackoverflow.com/a/19642301/52055

此外,在case类中,假定您的类参数使用“val”关键字,因此您无需提供它。所以你最终得到了

 trait Person
 {
    def name: String
 }

 case class Student(name: String) extends Person
 {
     ......   
 }