単一継承
Scala のクラスの継承は単一継承のようだ。もう少し言うと、スーパークラスのほかにトレイトというものを複数継承できるようだけど、トレイトについては日を改める。
クラスを継承するためには、extends キーワードに続けてスーパークラス名をつければいい。例を示そう。
scala> class Foo() { | def foo(): Unit = println("Foo") | } defined class Foo scala> class Bar() extends Foo { | def bar(): Unit = println("Bar") | } defined class Bar
ここではクラス Bar がクラス Foo を継承している。Foo にはメソッド foo があり、Bar には Foo から継承したメソッド foo と Bar で定義されたメソッド bar がある。
scala> val foo = new Foo() foo: Foo = Foo@3e81c10b scala> foo.foo Foo scala> val bar = new Bar() bar: Bar = Bar@5d842ce8 scala> bar.foo Foo scala> bar.bar Bar
override
継承したクラス(サブクラス)で、スーパークラスのメソッドをオーバーライドしたいときには、明示的に override キーワードをつける必要がある。これによって、オーバライドするつもりで新しいメソッドを定義してしまったり、逆に新しいメソッドを定義するつもりでオーバーライドしてしまうようなことを防いでいるようだ。
scala> class Baz() extends Foo { | override def foo(): Unit = println("Baz") | } defined class Baz scala> val baz = new Baz() baz: Baz = Baz@7b6dd92d scala> baz.foo Baz
この例では、Baz でメソッド foo をオーバーライドしている。
ところで、何気なく書いたけど、引数のないメソッドの呼び出しはカッコを省略できるんだな。