我如何实例化一个抽象类?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
或者隐式创建了一些具体类?在new A
之后,那些括号是什么意思?
答案 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
中有关匿名类实例化的部分