scala:抽象类实例化?

时间:2012-03-18 21:14:28

标签: scala abstract-class

我如何实例化一个抽象类?

  abstract class A {
    val a: Int
  }

  val a = new A {val a = 3}

或者隐式创建了一些具体类?在new A之后,那些括号是什么意思?

4 个答案:

答案 0 :(得分:19)

有了这个,你隐含地扩展A。你做的是语法糖,相当于:

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

这些括号只允许你动态扩展一个类,创建一个新的匿名类,它实例化值a,因此不再是抽象的。

答案 1 :(得分:5)

如果您了解Java,则类似于:

new SomeAbstractClass() {
    // possible necessary implementation
}

由于Scalas uniform access看起来你没有实现任何抽象函数,只是通过赋予a一个值,你实际上“混淆”了这个类。

换句话说,您正在创建一个具体子类A 的实例,而不给子类一个名称(因此称为“匿名”类)。

答案 2 :(得分:3)

Scala不仅可以创建匿名函数,还可以创建匿名类。

你所做的是与

相似
class Anon extends A {
  val a = 3
} 

但没有Anon名称

答案 3 :(得分:3)

您实例化一个从A继承的匿名类,并将其抽象重载成员。 有关参考,请参阅A Tour of Scala: Abstract Types

中有关匿名类实例化的部分