从父类函数覆盖类变量

时间:2020-05-17 13:14:42

标签: scala inheritance parent-child extends

我有一个父子班。

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函数。

1 个答案:

答案 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>