2014-09-27 10 views

Antwort

30

Nicht, dass jemand tut dies, aber:

$ 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 } 
                     ^

Möglicherweise manchmal wollen die Menschen es zu tun. (For instance.)

+0

Das ist völlig richtig. Ich brauchte eine Weile, um mich davon zu überzeugen. Für ein bisschen ausführlichere, schmerzhafte Details, siehe die Updates in [diese doppelte Frage] (http://stackoverflow.com/questions/30265070/whats-the-point-of-nonfinal-singleton-objects-in-scala). Siehe auch [diese Frage] (http://stackoverflow.com/questions/17308141/what-are-the-subt-differences-between-val-and-singleton-objects) –

20

Es macht keinen Unterschied; Objektdefinitionen sind immer endgültig. Die language specification erwähnt dies ausdrücklich in 5.4 Modifikatoren:

final für Objektdefinitionen redundant ist.

Verwandte Themen