如何实例化一个抽象类?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
或者说是一些具体的类被隐式创建了吗?那么new A
后面的大括号代表什么意思呢?
如何实例化一个抽象类?
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
}
a
赋值,您实际上已经“具体化”了该类。A
的具体子类的实例,而没有给子类命名(因此术语“匿名”类)。Scala允许你创建匿名类,不仅仅是匿名函数。
你所做的与以下内容相似:
class Anon extends A {
val a = 3
}
但是没有使用 Anon
名称