[英]Can singleton object extend a trait?
我想從Scala對象擴展一個特征並覆蓋那些特征中的方法。 所以我懷疑這些方法將成為對象或實例方法的靜態方法,並且這是從trait擴展到Scala對象的好方法。 請幫忙
trait A{
def show:Unit
}
object B extends A{
override def show(): Unit = {
println("inside Object")
}
}
Scala中沒有靜態方法 。 object
確實可以擴展一個trait
。 像show
這樣的Overriden方法不會成為靜態方法,而是屬於B.type
的單個實例 。 這是Scala的object
定義工具提供的單例模式。
在Scala REPL中嘗試以下操作:
object B
B
它應該輸出類似的東西
res0: B.type = B$@5688722f
注意值 B
類型是B.type
,所以B
只是一個值/實例,與靜態無關。
嗯,我認為你剛剛描述的一個常見的例子/用例是擴展App
特性並覆蓋main
定義。
object test extends App
{
override def main (args: Array[String]): Unit = {
println("Hello, let's get started")
}
}
一般來說,為什么不定義類本身來擴展特性呢?
如果要使用B()
(而不是new B()
)實例化B
新實例,則執行此操作是有意義的。
trait A{
def show:Unit
}
object B { // companion aka singleton object
def apply(){
...
}
}
class B extends A{
override def show(): Unit = {
println("inside Object")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.