【发布时间】:2016-04-01 03:40:13
【问题描述】:
我想知道将 abstract 关键字与 trait 结合使用的语义是什么。
如果 trait 没有定义任何抽象方法,abstract 关键字不会阻止我创建实例:
scala> abstract trait T
defined trait T
scala> new T{}
res0: java.lang.Object with T = $anon$1@12cd927d
另一方面,如果 trait 确实定义了一个抽象方法,那么无论 abstract 关键字是否存在,我都无法创建实例(当然不实现此方法):
scala> abstract trait T { def foo : Unit }
defined trait T
scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type => Unit is not defined
new T{}
^
scala> trait T { def foo : Unit }
defined trait T
scala> new T{}
<console>:9: error: object creation impossible, since method foo in trait T of type => Unit is not defined
new T{}
^
那么trait 前面的abstract 关键字有什么用处?
【问题讨论】:
-
你不能创建一个特征的实例。当你说
new T{}时,你创建了一个混合了特征 T 的匿名对象。