Наследование Scala от класса Java: выберите, какой суперструктор вызывать
У меня есть несколько конструктор в классе Java.
public class A{
public A(){...}
public A(String param){...}
public A(String param, Object value}
}
Теперь я хочу создать класс Scala, который наследуется от этого класса.
class B extends A{
super("abc")
}
Но этот синтаксис неверен. Скала жалуется, что '.' expected but '(' found.
Каков правильный способ сделать это?
2 ответа
Решение
Вы должны добавить аргументы конструктора к определению класса следующим образом:
class B extends A("abc")
Как говорит Мориц, вы должны указывать аргументы конструктора непосредственно в определении класса. Кроме того, вы можете использовать вторичные конструкторы таким образом:
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)
}
Но вы должны обратиться к this
, super
это невозможно.