2012-03-18 298 views
8

它是如何來實例化一個抽象類?scala:抽象類實例化?

abstract class A { 
    val a: Int 
    } 

    val a = new A {val a = 3} 

或者是一些隱含創建的具體類?那麼new A之後的括號是什麼意思?

回答

18

用此,可以隱式擴展A。你所做的是語法糖,等價於:

class A' extends A { 
    val a = 3 
} 
val a = new A' 

這些支架僅僅是讓你快速擴展一個類,創建一個新的,匿名類,實例化價值a,因此不是抽象了。

5

如果你知道Java中,這是類似於:

new SomeAbstractClass() { 
    // possible necessary implementation 
} 

由於Scalas uniform access它看起來像你不打算使用任何抽象的功能,而只是通過給a一個值,你實際做「concretesize 「 班上。

換句話說,您將創建一個具體子類A的實例,而不會給子類一個名稱(因此稱爲「匿名」類)。

3

Scala允許您不僅創建匿名函數,而且創建匿名類。

你做了什麼是simular到

class Anon extends A { 
    val a = 3 
} 

但沒有Anon