【问题标题】:Scala inheritance from Java class: select which super constructor to callScala 从 Java 类继承:选择要调用的超级构造函数
【发布时间】:2010-07-26 16:25:57
【问题描述】:

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

public class A{
  public A(){...}
  public A(String param){...}
  public A(String param, Object value}
}

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

class B extends A{
  super("abc")
}

但是这个语法是无效的。 Scala 抱怨 '.' expected but '(' found.

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

【问题讨论】:

    标签: inheritance scala


    【解决方案1】:

    正如 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)
    }
    

    但是你必须参考thissuper是不可能的。

    【讨论】:

      【解决方案2】:

      您必须像这样将构造函数参数附加到类定义中:

      class B extends A("abc")
      

      【讨论】:

        猜你喜欢
        • 2011-11-10
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 2021-11-15
        • 2015-04-04
        • 1970-01-01
        • 2012-10-16
        • 2020-09-11
        相关资源
        最近更新 更多