我必须将Java代码转换为Scala并使用覆盖类型。我的Java代码是:
public class StatementNode extends Node {
public StatementNode()
{
super(NodeType.statement);
}
protected StatementNode(NodeType type)
{
super(type);
}
我的等效scala代码是:
class StatementNode extends Node(NodeType.statement) {
protected def this(`type`: NodeType) {
super(`type`)
}
适用于Java但我发现scala不支持super关键字。那么我们如何在scala中应用overriding类型?请帮忙!如果您需要任何其他信息,请与我们联系。
答案 0 :(得分:1)
在Scala中,重载的构造函数必须调用类构造函数的最通用形式,该构造函数也必须是默认构造函数。也就是说,你不能拥有StatementNode
的无参数构造函数,然后是一个接受NodeType
作为参数的重载而不调用无参数的默认构造函数(这是无法工作的,反正)。
相反,你可以这样做:
class StatementNode protected (`type`: NodeType) extends Node(`type`) {
def this() = this(NodeType.statement)
}
您可以创建默认构造函数protected
并使用NodeType
参数,然后提供一个不带调用主构造函数的参数的重载并将其传递给NodeType.statement
。这应该有效地做同样的事情。
无需在Scala中调用super
,因为它是通过extends Node(
类型)
调用的,这就是默认构造函数必须包含最通用形式的参数的原因。