2014-09-27 19 views

risposta

30

Non che qualcuno fa questo, ma:

$ scala -Yoverride-objects 
Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_11). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> trait A { object O } ; trait B extends A { override object O } 
defined trait A 
defined trait B 

scala> trait A { final object O } ; trait B extends A { override object O } 
<console>:8: error: overriding object O in trait A; 
object O cannot override final member 
     trait A { final object O } ; trait B extends A { override object O } 
                     ^

Forse a volte la gente vuole farlo.()

+0

Questo è assolutamente giusto. Mi ci è voluto un po 'per convincermi di questo, però. Per dettagli un po 'più dettagliati e dolorosi, vedere gli aggiornamenti in [questa domanda duplicata] (http://stackoverflow.com/questions/30265070/whats-the-point-of-nonfinal-singleton-objects-in-scala). Vedi anche [questa domanda] (http://stackoverflow.com/questions/17308141/what-are-the-subtle-differences-between-val-and-singleton-objects) –

20

Non fa differenza; le definizioni degli oggetti sono sempre definitive. Il language specification menzioni esplicitamente questo 5.4 Modificatori:

final è ridondante per le definizioni degli oggetti.