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.