2012-03-18 122 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