Мне интересно, что такое семантика использования ключевого слова abstract
в сочетании с trait
.Семантика абстрактных черт в Scala
Если признак не определяет абстрактные методы, то 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
хорошо?
Вы не можете создать экземпляр признака. Когда вы говорите 'new T {}', вы создаете анонимный объект, который смешивает черту T. – sschaef