Мне интересно, какова семантика использования ключевого слова 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
подходит для?