Меня смущает общий подтипирование.
В Java, если тип A является подтипом B, общий тип C<A> и C<B> являются инвариантными. Например, ArrayList<Base> не является подтипом ArrayList<Derived>.
Однако в Scala общий тип C<A> и C<B> являются ковариантными, если тип A является подтипом B. Итак, что свойство универсального класса в Scala имеет, но не в Java?