Scala クラス & オブジェクト & トレイト
クラス
class Point(val x: Int, val y: Int)
メソッド定義
返り値の型は読みやすさのために明記すべき
private
- そのクラス内だけから
protected
- 派生クラスからのみ
private[this]
- 同じオブジェクトからのみ
private[パッケージ名]
- 同じパッケージから
protected[パッケージ名]
- 派生クラスに加えて同じパッケージに所属しているもの全て
何もつけない
- publicとなる
複数の引数リストを持つメソッド
add(x: Int)(y: Int)
の様に記載する事が可能で、シンタックスシュガー書いたりimplicit parameter
なるものや型推論の補助に使われる- 単に複数の引数を持つメソッドとしても定義可能
フィールド定義
- アクセス修飾子の意味はメソッドと同様
private[this]
をつけたフィールドへのアクセスは若干高速になる
抽象メンバー
- メソッドやフィールドにおいて中身を持たせずに定義することができる
- メソッドやフィールドの中身が無い以外は通常の定義方法と同じ
継承
- Javaと同様にextendsで継承可能
オブジェクト
オブジェクトについて
- Scalaでは全ての値がオブジェクトで、全てのメソッドは何らかのオブジェクトに属している
- そのためJavaの様にstaticフィールドやstaticメソッドを作成する事が出来ない
- 代わりに
object
キーワードによってシングルトンオブジェクトを作成し、ユーティリティメソッドやファクトリメソッドとして使用する
コンパニオンオブジェクト
クラスと同じファイル内、同じ名前で定義されたシングルトンオブジェクトは、コンパニオンオブジェクトと呼ばれます。コンパニオンオブジェクトは対応するクラスに対して特権的なアクセス権を持っています。
private[this](そのオブジェクト内からのみアクセス可能)なクラスのメンバーに対してはアクセス不可