从父类函数中覆盖类变量



我有一个父类和子类。

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 上工作,并且需要使用变量的不同值调用提取函数两次。

不可能在方法中覆盖超类不可变值。

相反,您可以在超级类中更改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

如果你想用不同的name值调用extract方法两次,只需扩展父类并覆盖名称,使用不同的名称值创建子对象,如下所示。

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>

最新更新