読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

finalとsealed

Scala

Classの継承やメンバーのオーバーライドを制限する機能として「final」と「sealed」が使えます。

  • 「final」はクラスやメンバーに対して設定できる修飾詞です。
    • finalが設定されたクラスは継承できません。
    • finalが設定されたメンバーはオーバーライドできません。
  • 「sealed」はクラスに設定できる修飾詞です。
    • sealedとされたクラスは、同一ファイル内のクラスからは継承できますが、別ファイル内で定義されたクラスでは継承できません。
    • ただし、sealedクラスを継承したクラスは、別ファイルのクラスからも継承できます。
// finalクラス
// このクラスは継承できない。
final class Foo

// これはエラー
//class ExtendsFoo extends Foo

class Var {
  // final メンバー
  // これらはオーバーライド不可
  final def a = "a"
  final val b = "b"
}

class ExtendVar extends Var {
  //override def a = "aa" // これはエラー
  //override val b = "bb" // これはエラー
}


// sealedクラス
sealed class Hoge {
  def a = "a" 
}
// sealedクラスの派生クラス。同一ファイル内なのでOK
class ExtendsHoge extends Hoge {
  def b = "b"
}

↑とは別のファイル。

// 別ファイルのクラスでは継承できない。
// ↓はエラー
// class ExtendsHogeInOtherFile extends Hoge

// sealedクラスの派生クラスは別ファイルからも利用できる。
class ExtendsExtendsHogeInOtherFile extends ExtendsHoge

object FinalClassSample2 {
  def main(args: Array[String]) {
    
    // sealedクラスのメソッド呼び出しもOK
    var a = new ExtendsExtendsHogeInOtherFile
    println( a.a ) 
    println( a.b ) 
  }
}

FinalClassSample2の実行結果です。

a
b