首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在特征中定义这个构造函数是不可能的?

为什么在特征中定义这个构造函数是不可能的?
EN

Stack Overflow用户
提问于 2015-11-10 23:29:14
回答 1查看 57关注 0票数 1

我在马丁·奥德斯基( Martin )的书中读到,“特性扩展了一个超类AnyRef”。对我来说就像一堂课。我知道我不能在类中通常使用的特征中使用默认构造函数。

代码语言:javascript
复制
class B(s: String)

同时,我可以看出这样做是不可能的

代码语言:javascript
复制
trait A {
  def this(s: String) {
    super()  
  }
}

编译器说:

代码语言:javascript
复制
Error:(14, 7) 'this' expected but 'super' found.
  super()
  ^

为什么是这样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-10 23:46:49

直接从Scala语言规范

一个特征是一个类,它意味着作为一个混合体添加到其他类中。与普通类不同,特性不能具有构造函数参数。此外,没有构造函数参数传递给特征的超类。这并不是必要的,因为在初始化超类之后才初始化特征。

归根结底是:

  1. 这些特性归结为没有参数的java接口,这对于java-interop来说很好。
  2. 虽然理论上允许特征具有构造函数参数是可能的,但它使语言比它所需要的更复杂。几乎可以肯定有一种方法可以完成相同的功能,而不需要特征构造器参数。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33641628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档