scala object inheritance final

scala - ¿Cuál es el punto de declarar un objeto como "final"?



object inheritance (2)

No es que alguien haga esto, sino:

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

Posiblemente a veces la gente quiera hacerlo. ( Por ejemplo )

Me di cuenta de que es posible declarar objetos como final en Scala:

final object O

¿Cuál es el punto de hacer eso? Uno no puede heredar de los objetos de todos modos:

object A object B extends A // not found: type A


No hace ninguna diferencia; las definiciones de objetos son siempre finales. La especificación del lenguaje menciona explícitamente esto en 5.4 Modificadores :

final es redundante para definiciones de objetos.