我正在使用JavaTpoint练习这段代码来学习Scala中的继承。但我无法从类的车辆访问成员Bike,其值已初始化为零。我尝试使用超类型参考,但它仍显示重写值。你能告诉我如何使用Bike类的实例访问值speed = 0。这是代码和输出。 提前感谢。
class Vehicle{
val speed = 0
println("In vehicle constructor " +speed)
def run(){
println(s"vehicle is running at $speed")
}
}
class Bike extends Vehicle{
override val speed = 100
override def run(){
super.run()
println(s"Bike is running at $speed km/hr")
}
}
object MainObject3{
def main(args:Array[String]){
var b = new Bike()
b.run()
var v = new Vehicle()
v.run()
var ve:Vehicle=new Bike()
println("SuperType reference" + ve.speed)
ve.run()
}
}
答案 0 :(得分:1)
我可以想到两个选择。
1)在覆盖之前保存该值。
class Bike extends Vehicle{
val oldspeed = speed
override val speed = 100
override def run(){
println(s"Vehicle started at $oldspeed km/hr")
println(s"Bike is running at $speed km/hr")
}
}
2)在基类中将值设为def
。然后可以在子类中访问它。
class Vehicle{
def speed = 0
def run(): Unit = {...}
}
class Bike extends Vehicle{
override val speed = 100
override def run(){
println(s"Vehicle started at ${super.speed} km/hr")
println(s"Bike is running at $speed km/hr")
}
}