它是如何来实例化一个抽象类?scala:抽象类实例化?
abstract class A {
val a: Int
}
val a = new A {val a = 3}
或者是一些隐含创建的具体类?那么new A
之后的括号是什么意思?
它是如何来实例化一个抽象类?scala:抽象类实例化?
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
}
由于Scalas uniform access它看起来像你不打算使用任何抽象的功能,而只是通过给a
一个值,你实际做“concretesize “ 班上。
换句话说,您将创建一个具体子类A
的实例,而不会给子类一个名称(因此称为“匿名”类)。
Scala允许您不仅创建匿名函数,而且创建匿名类。
你做了什么是simular到
class Anon extends A {
val a = 3
}
但没有Anon
名
你实例,从A继承和重载它的抽象成员的匿名类。 仅供参考,请参阅有关匿名类实例的部分A Tour of Scala: Abstract Types