使用final修饰object的场景极少见,需要显式打开-Yoverride-objects
编译选项才行:
➜ scala -Yoverride-objects
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala> class A { object B }
defined class A
scala> class C extends A { override object B {} }
defined class C
如果A内部对object B
使用final
修饰了,子类C就不能覆盖这个object,不过它的意义是什么?这里object B
是一个module
,要解释object为何被当作module来设计,需要整理一下,等有时间再说。
PS,我刚发现2.11版本之后repl下,当你定义一个object时,提示已经不同了,在2.11版本之前,repl下会显示 "defined module XXX", 而 2.11 里已经变成了 "defined object XXX",可能隐含着设计者对module(早期scala中module应该是借鉴ML语言的module)这个术语可能存在理解不一致的担心,所以不再使用这个名词(只是我的猜测)。