【scala入門】rubyエンジニアがscalaを勉強したメモ その3
case class
- 特徴
sealed class
- 宣言したファイル内でしか使えない
パッケージオブジェクト
- パッケージ自体と同じ名前を持つオブジェクト
- 同じパッケージ内では import 文を利用することなしに、定義したメソッドを呼び出すことができる
trait
- トレイトを継承することをミックスイン
- クラスの継承については、ミックスインと呼ばない
- 特徴
- クラスは複数継承できないが、traitはできる
- 多重継承による菱型継承問題
- 解決方法
- かぶってるmethodを
override
する super[TraitB].greet()
指定してしまう
- かぶってるmethodを
- 線形化(linearization)
- 継承もとのそれぞれで、かぶっているmethodをoverrideする
- すると
extends ClassA with TraitB with TraitC)
だと、一番後ろのものが評価される
- 解決方法
- 自分型アノテーション(self type annotations
self: TraitB =>
みたいなやつ- 後からnew するときに、withで対象のtraitをいれる
- インスタンス生成時に、依存性を選択できるイメージ
- Scala のクラスおよびトレイトはスーパークラスから順番に初期化される