Java类的Scala继承:选择要调用的超级构造函数

Phư*_*yễn 19 inheritance scala

我在Java类中有多个构造函数.

public class A{
  public A(){...}
  public A(String param){...}
  public A(String param, Object value}
}
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个继承自该类的Scala类

class B extends A{
  super("abc")
}
Run Code Online (Sandbox Code Playgroud)

但是这种语法无效.斯卡拉抱怨说'.' expected but '(' found.

这样做的有效方法是什么?

Lan*_*dei 29

正如Moritz所说,你必须直接在类定义中提供构造函数args.此外,您可以使用辅助构造函数:

class B(a:String, b:String) extends A(a,b) {
  def this(a:String) = this(a, "some default")
  def this(num:Int) = this(num.toString)
}
Run Code Online (Sandbox Code Playgroud)

但你必须参考this,super是不可能的.


Mor*_*itz 27

您必须将构造函数参数附加到类定义,如下所示:

class B extends A("abc")
Run Code Online (Sandbox Code Playgroud)