В чем разница между sealed abstract
и abstract
Scala class?
Scala закрытый абстрактный абстрактный абстрактный класс
Ответ 1
Разница заключается в том, что все подклассы закрытого класса (независимо от того, абстрактны они или нет) должны быть в том же файле, что и закрытый класс.
Ответ 2
Как ответил, все непосредственно наследующие подклассы закрытого класса (абстрактные или нет) должны быть в одном файле. Практическим следствием этого является то, что компилятор может предупредить, если совпадение шаблона является неполным. Например:
sealed abstract class Tree
case class Node(left: Tree, right: Tree) extends Tree
case class Leaf[T](value: T) extends Tree
case object Empty extends Tree
def dps(t: Tree): Unit = t match {
case Node(left, right) => dps(left); dps(right)
case Leaf(x) => println("Leaf "+x)
// case Empty => println("Empty") // Compiler warns here
}
Если Tree
- sealed
, тогда компилятор предупреждает, если эта последняя строка не раскомментирована.