2017-08-29 18 views
0

私はScalaの継承を学習するためにJavaTpointからこのコードを練習しています。しかし、私はクラスのメンバーBikeにアクセスすることはできません。値は0に初期化されています。私はスーパータイプの参照を試みましたが、それでもオーバーライドされた値を示しています。 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

私は2つのオプションを考えることができます。

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") 
    } 
} 
+0

1)値を新しいフィールドに保存すると、別のメモリ位置に保存することになります。それはアクセスを拒否する。 2)デフオルトが優先されます! – Learner

関連する問題