-2

私はクラスを持っています:

class BaseClass(val a: Int) {
 //....
}

そして、2 つの方法で表すことができる子クラス:

class ChildClass extends BaseClass {
 //...
}

また

class ChildClass(a: Int) extends BaseClass(a) {
   // if I use val keyword, it doesn't change anything -- the error remains  
   //...
 }

// the error:
//overriding value a in class BaseClass of type Int;
//[error]  value a needs `override' modifier

どちらの場合もエラーがあるため、コンパイルすることさえできません。

コンパイルするにはどうすればよいですか?

4

3 に答える 3

1

コードに問題はありません。class ChildClass(a: Int) extends BaseClass(a)正常に動作します。問題は別の場所にあります。

于 2013-06-04T09:24:07.327 に答える
1

ChildClassとして宣言する

class ChildClass(val a: Int) extends BaseClass(a)

は、プライベート フィールドを導入する (しようとする) ことを意味しますChildClass.a。は既に宣言されているためBaseClass.a、エラーは、オーバーライドしたいことを明示的に述べる必要があることを示していますBaseClass.a。つまり、

class ChildClass(override val a: Int) extends BaseClass(a)

これを回避するには、

a) 新しく導入された変数の名前を変更します。たとえば、

class ChildClass(val _a: Int) extends BaseClass(_a)

b) または で宣言するが、定義はしないBaseClass。ただし、これはBaseClass抽象化できる場合にのみ機能します。

abstract class BaseClass {
  def a: Int
}

class ChildClass(val a: Int) extends BaseClass
于 2013-06-04T09:15:15.940 に答える