如何使用子类的实例访问超类的成员

时间:2017-08-29 07:09:08

标签: scala inheritance access member instances

我正在使用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()
    }  
} 

How do I get the result using instance of Bike.

1 个答案:

答案 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")
  }
}