Мне интересно, что такое семантика использования ключевого слова abstract
в сочетании с trait
.
Если черта не определяет абстрактные методы, ключевое слово abstract
не мешает мне создать экземпляр:
scala> abstract trait T
defined trait T
scala> new T{}
res0: java.lang.Object with T = [email protected]
С другой стороны, если черта определяет абстрактный метод, я не могу создать экземпляр (без реализации этого метода, конечно) независимо от того, присутствует ли ключевое слово abstract
или нет:
scala> abstract trait T { def foo : Unit }
defined trait T
scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type => Unit is not defined
new T{}
^
scala> trait T { def foo : Unit }
defined trait T
scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type => Unit is not defined
new T{}
^
Итак, каково ключевое слово abstract
перед trait
хорошим для?