我有一个父子班。
class a {
val name :String = "jo"
def extract(){
println(name)
}
}
现在我需要执行以下操作。
class b extends a {
override def extract(){
override var name :String = "dave". //the problem is here and
super.extract()
name = "jenny" //here
super.extract()
}
}
现在让我面对。
1)如果im要覆盖类a中的值,则需要将其设置为不可变的,我不能使用var。
2)需要使用不同的变量两次调用超级函数。
3)无法在函数内部调用覆盖
如果有人知道如何解决这个问题,将非常感谢。我不能在A级课上做任何改变。我只能在b上工作,并且需要使用不同的变量值调用两次extract函数。
答案 0 :(得分:2)
不可能在方法中覆盖超类不可变值。
相反,您可以在超级类中更改var
,但不能在子类中覆盖。
请检查以下代码。
scala> :paste
// Entering paste mode (ctrl-D to finish)
class a {
var name = ""
def extract(){
println(name)
}
}
class b extends a {
override def extract(){
name = "dave" //the problem is here and
super.extract()
name = "jenny" //here
super.extract()
}
}
// Exiting paste mode, now interpreting.
defined class a
defined class b
scala> (new b).extract
dave
jenny
如果要使用不同的extract
值两次调用name
方法,只需扩展父类并覆盖名称,创建具有不同名称值的子对象,如下所示。
scala> :paste
// Entering paste mode (ctrl-D to finish)
class a {
val name = ""
def extract(){
println(name)
}
}
class b (override val name: String) extends a {
override def extract(){
super.extract()
}
}
// Exiting paste mode, now interpreting.
defined class a
defined class b
scala> (new b("dave")).extract
dave
scala> (new b("jenny")).extract
jenny
scala>