我在scala中遇到了一个奇怪的问题 . 以下是我的代码,类Employee扩展类Person
但是这段代码无法编译,我已经明确地将firstName和lastName定义为val变量 . 这是为什么 ?这是否意味着我必须覆盖基类中的val变量?目的是什么?
class Person( firstName: String, lastName: String) {
}
class Employee(override val firstName: String, override val lastName: String, val depart: String)
extends Person(firstName,lastName){
}
4 回答
构造函数的输入参数不是val,除非你说它们 . 如果它们已经存在,为什么要覆盖它们呢?
如果它们不是val并且您想要制作val,则不需要覆盖:
由于构造函数参数在Person中没有val / var声明,并且Person不是case类,因此参数不是Person类的成员,只是构造函数参数 . 编译器基本上告诉你:嘿,你说,firstName和lastName是成员,它覆盖/重新定义从基类继承的东西 - 但据我所知,没有任何东西......
你不需要在这里声明firstName / lastName作为覆盖,顺便说一下 . 简单地将值转发到基类的构造函数就可以了 .
您也可以考虑尽可能多地将超类重新设计为特征 . 例:
甚至
除非我've misunderstood your intention, here' s如何扩展
Person
.