它是如何來實例化一個抽象類?scala:抽象類實例化?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
或者是一些隱含創建的具體類?那麼new A
之後的括號是什麼意思?
它是如何來實例化一個抽象類?scala:抽象類實例化?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
或者是一些隱含創建的具體類?那麼new A
之後的括號是什麼意思?
用此,可以隱式擴展A
。你所做的是語法糖,等價於:
class A' extends A {
val a = 3
}
val a = new A'
這些支架僅僅是讓你快速擴展一個類,創建一個新的,匿名類,實例化價值a
,因此不是抽象了。
如果你知道Java中,這是類似於:
new SomeAbstractClass() {
// possible necessary implementation
}
由於Scalas uniform access它看起來像你不打算使用任何抽象的功能,而只是通過給a
一個值,你實際做「concretesize 「 班上。
換句話說,您將創建一個具體子類A
的實例,而不會給子類一個名稱(因此稱爲「匿名」類)。
Scala允許您不僅創建匿名函數,而且創建匿名類。
你做了什麼是simular到
class Anon extends A {
val a = 3
}
但沒有Anon
名
你實例,從A繼承和重載它的抽象成員的匿名類。 僅供參考,請參閱有關匿名類實例的部分A Tour of Scala: Abstract Types