by shigemk2

当面は技術的なことしか書かない

Scala メソッドでvalをオーバーライドする

概要

Javaではクラス内に同じ名前のフィールドとメソッドをそれぞれ定義できるが、
Scalaではフィールドとメソッドを統一的に扱っており、同じ名前では定義できない。

その理由は、引数なしのメソッドをvalでオーバーライドできるようにするため。

コード

scala> abstract class X {
     | def contents:String = "contents from X"
     | }
defined class X

scala> class Y extends X {
     | override val contents:String = "contents!"
     | }
defined class Y

scala> val y = new Y
y: Y = Y@44ce4013

scala> y.contents
res0: String = contents!