2017-04-05 5 views
1

を動作しません::Scalaのoverrideキーワードは、私は、サブクラスのスーパークラスから値をオーバーライドすることでScalaでの継承を学ぶための簡単なコードをwritringい

class point(xy: Int, ry: Int) { 

    var x: Int = xy 
    var y: Int = ry 

    def move(dx: Int, dy: Int){ 

    x = x + dx 
    y = y + dy 

    println (x); 
    println (y); 

    } 
} 

class next(override val xy: Int, override val ry: Int, val tet: Int) extends point(xy,ry){ 
    var r: Int = tet 

    def move(dx: Int, dy: Int, dz: Int){ 

    x = x + dx 
    y = y + dy 
    r = r + tet 

     println ("Point x location : " + x); 
     println ("Point y location : " + y); 
     println ("Point z location : " + r); 
} 
} 

object Demo { 
    def main(args: Array[String]) { 
     val loc = new next(10, 20, 15); 

     // Move to a new location 
     loc.move(10, 10, 5); 
    } 
} 

私のスーパーを拡張しながら、私はキーワード「オーバーライド」を使用私のサブクラスでクラス「ポイント」「次」が、私は次のエラー::

"value ry override nothing" 
    "value xy override nothing" 

しかし、私はそれらをオーバーライドしていますが、私は、キーワードを削除すると、コードに誤りがないを取得しています。私のコードに何か不足していますか?

に関して、Amitesh

+1

私は、Scalaの 'override'キーワードが確実に動作することを保証します*。一般的に、何千人もの開発者が毎日何十倍も使われている基本的な言語機能が壊れていると思うなら、それはあなたが間違っていることになります。 Scalaコンパイラは複雑な獣ですが、バグがありますが、これらのバグは、通常、型推論、型チェッカ、または暗黙のリゾルバで、はるかに不明瞭なコーナーになりがちです。 –

答えて

5

はあなたのポイントクラスはxyまたはryフィールド/メソッドを持っていないので、確かにあなたは何をオーバーライドしていません。これらのコンストラクタ引数をメソッドに変換する場合は、class point(val xy: Int, val ry: Int)を使用します。

+0

ありがとう、私は見落としました。今働いている。 – user3521180

関連する問題