我想从Scala对象扩展一个特征,并覆盖那些处于特征中的方法。所以我怀疑那些方法对于该对象将变为静态 或实例方法,这是从trait扩展到Scala Object的好方法。请为此提供帮助
trait A{
def show:Unit
}
object B extends A{
override def show(): Unit = {
println("inside Object")
}
}
答案 0 :(得分:3)
There are no static methods in Scala。 object
确实可以扩展trait
。像show
这样的重写方法不会成为静态方法,而是属于B.type
的单个实例。这是Scala的object
定义工具提供的单例模式。
在Scala REPL中尝试以下操作:
object B
B
它应该输出类似
res0: B.type = B$@5688722f
请注意值 B
的类型为B.type
,因此B
只是一个值/实例,与静态无关。
答案 1 :(得分:0)
嗯,我认为您刚才描述的一个常见示例/用例是扩展range
特性并覆盖App
定义。
main
通常,为什么不定义类本身以扩展特征?
如果要使用object test extends App
{
override def main (args: Array[String]): Unit = {
println("Hello, let's get started")
}
}
(而不是B
)实例化B()
的新实例,则这样做是有意义的。
new B()