Семантика абстрактных признаков в Scala

Мне интересно, какова семантика использования ключевого слова abstract в сочетании с чертой есть.

Если типаж не определяет какие-либо абстрактные методы, ключевое слово abstract не мешает мне создать экземпляр:

scala> abstract trait T
defined trait T

scala> new T{}
res0: java.lang.Object with T = $anon$1@12cd927d

С другой стороны, если трейт действительно определяет абстрактный метод, я не могу создать экземпляр (без реализации этого метода, конечно) независимо от того, присутствует ли ключевое слово 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 подходит для?

16
задан Frank 19 February 2012 в 12:04
поделиться