ジェネリックの型引数って継承できたらいいと思わない?
実体化したらそれで終わりなんて継承ツリーの中で使いにくい
自分と同じ型のメンバーを表すだけでも大変
抽象型を使ってみたが妙に不自然な書き方しか思いつかない

abstract class Base {
type TParent <: Base
var parent: Option[TParent] = None
}

class とり extends Base {
override type TParent <: とり
override def toString = "とり"
}

class とんび extends とり {
override type TParent <: とんび
override def toString = "とんび"
}

object AbstractTypeTest {
def main(args: Array[String]) = {
var とり = new とり { type TParent = とり }
とり.parent = Option(new とり { type TParent = とり })
println(とり.parent)
var とんび = new とんび { type TParent = とんび }
とんび.parent = Option(new とんび { type TParent = とんび })
println(とんび.parent)
}
}