Наследование от тематических классов проблематично. Предположим, у вас есть такой код:
case class Person(name: String) { }
case class Homeowner(address: String,override val name: String)
extends Person(name) { }
scala> Person("John") == Homeowner("1 Main St","John")
res0: Boolean = true
scala> Homeowner("1 Main St","John") == Person("John")
res1: Boolean = false
Возможно, это то, что вы хотите, но обычно вы хотите a == b, если и только если b == a. К сожалению, компилятор не может автоматически исправить это за вас.
Это становится еще хуже, потому что хэш-код Person("John")
не совпадает с хэш-кодом Homeowner("1 Main St","John")
, поэтому теперь равняется действиям странным , а hashCode действует странным.
Пока вы знаете, чего ожидать, наследование от case-классов может дать приемлемые результаты, но это стало рассматриваться как дурной тон (и, таким образом, не рекомендуется в 2.8).