Perl日記

PerlとかRubyとかPHPとかPythonとか

Scalaでクラスを継承したときのコンストラクタのパラメータ

newするときに渡す引数は、子クラス定義時も親クラス名といっしょに指定しないといけない。

class Hoge(a: Int)

class Fuga extends Hoge
// error: not enough arguments for constructor Hoge: (a: Int)Hoge.

class Fuga(a: Int) extends Hoge(a)
// ok
// Fugaの引数がHogeに渡される

デフォルト引数が親クラスで設定されているときは、指定しなくてもいい。
あるいは、子クラス定義の時に変更できる。

class Bar(val a: Int = 123, val b: Int = 234)

class Baz() extends Bar

val baz = new Baz()
baz.a //=> 123
baz.b //=> 234


class Foo() extends Bar(b = 345) // 名前付き引数で渡す

val foo = new Foo()
foo.a //=> 123
foo.b //=> 345