将对象声明为“最终”有什么意义?

时间:2014-09-27 21:57:57

标签: scala object inheritance final

我刚刚注意到可以在Scala中将对象声明为final

final object O

这样做有什么意义?无论如何,我们无法继承对象:

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

2 个答案:

答案 0 :(得分:34)

并非有人这样​​做,但是:

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

有时人们可能想要这样做。 (For instance.

答案 1 :(得分:26)

没有区别;对象定义总是最终的。 language specification 5.4修饰符中明确提到了这一点:

  对象定义

final是多余的。