问题
I have a parent and child class.
class a {
val name :String = "jo"
def extract(){
println(name)
}
}
now i need to do as below.
class b extends a {
override def extract(){
override var name :String = "dave". //the problem is here and
super.extract()
name = "jenny" //here
super.extract()
}
}
Issues Im facing now.
1) I cannot use var if im to override the value in class a, needs to be immutable to use override.
2) needs to call the super function twice with different variable.
3) Cannot call override inside the function
Would really appreciate if anyone knew how to get around this. I cannot change anything in class a. I can work only on b and needs to call the extract function twice with different values for the variable.
回答1:
It's not possible to override super class immutable values inside method.
Instead you can change var
in super class but don't override in child class.
Please check below code.
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
If you want to call extract
method twice with different name
values, Just extend parent class & override name, create child object with different name values like below.
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>
来源:https://stackoverflow.com/questions/61852375/override-a-class-variable-from-parent-classes-function