scala:抽象类实例化?

zap*_*dlo 8 abstract-class scala

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

  abstract class A {
    val a: Int
  }

  val a = new A {val a = 3}
Run Code Online (Sandbox Code Playgroud)

或者是隐式创建的一些具体类?那些支撑后的new A意思是什么?

Lan*_*nbo 21

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

class A' extends A {
    val a = 3
}
val a = new A'
Run Code Online (Sandbox Code Playgroud)

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


aio*_*obe 5

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

new SomeAbstractClass() {
    // possible necessary implementation
}
Run Code Online (Sandbox Code Playgroud)

由于Scalas 统一访问,看起来你没有实现任何抽象函数,但只是给出a一个值,你实际上是"混合"类.

换句话说,您正在创建一个具体子类A的实例,而不给子类一个名称(因此术语"匿名"类).