Mi chiedo quale sia la semantica dell'utilizzo della parola chiave abstract
in combinazione con uno trait
.Semantica di tratti astratti in Scala
Se il tratto non definisce alcun metodi astratti, la parola chiave abstract
non mi impedisce di creare un'istanza:
scala> abstract trait T
defined trait T
scala> new T{}
res0: java.lang.Object with T = [email protected]
D'altra parte, se il tratto fa definire un metodo astratto, non posso creare un'istanza (senza implementare questo metodo naturalmente), non importa se la parola abstract
è presente o no:
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{}
^
Qual è la parola abstract
davanti ad un trait
buono?
Non è possibile creare un'istanza di un tratto. Quando dici 'new T {}' crei un oggetto anonimo che mescola il tratto T. – sschaef