Запечатанная черта - это то же самое, что запечатанный класс?
Что касается sealed, да. Они разделяют обычные различия между traitи class, конечно.
Или, если нет, в чем различия?
Мут.
Когда стоит использовать запечатанную черту (а когда нет)?
Если у вас есть sealed class X, то вы должны проверить, Xа также любые подклассы. То же самое не относится к sealed abstract class Xили sealed trait X. Так что вы могли бы сделать sealed abstract class X, но это гораздо более многословно, чем просто traitи для небольшого преимущества.
Основным преимуществом использования abstract classнад a traitявляется то, что он может получать параметры. Это преимущество особенно актуально при использовании классов типов. Допустим, вы хотите построить отсортированное дерево, например. Вы можете написать это:
sealed abstract class Tree[T : Ordering]
но вы не можете сделать это:
sealed trait Tree[T : Ordering]
поскольку границы контекста (и границы представления) реализованы с неявными параметрами. Учитывая, что черты не могут получать параметры, вы не можете этого сделать.
Лично я предпочитаю sealed traitи использую это, если какая-то конкретная причина не заставляет меня использовать sealed abstract class. И я говорю не о тонких причинах, а о личных причинах, которые вы не можете игнорировать, таких как использование классов типов.