不从Java父类调用Scala子类构造函数

时间:2014-11-22 19:20:12

标签: java scala inheritance

我不太确定我做错了什么,我有一个名为Player的Java父类和一个Scala子类Character。当我调用Character类时,正在调用父构造函数,但子构造函数不是。我觉得我在这里缺少一些基本的东西。

这是Java类(父级):

public class Player implements java.io.Serializable {
    public Player(EntityClientPlayerMP player){
       //...
    }
}

这是Scala类(Child):

class Character(clientPlayer:EntityClientPlayerMP) extends Player(clientPlayer) with Serializable {

  def Character(client:EntityClientPlayerMP) = {
    //...
  }

  def Character(name:String, playerUID:String) = {
    //...
  }

  def Character(name:String) = {
    //...
  }

  def Character() = {
     //...
  }
}

1 个答案:

答案 0 :(得分:1)

Scala中的构造函数与Java的工作方式不同。特别是,它们 def与该类同名。您可以read about it种不同的地方。

在任何情况下,如果你真的需要替代构造函数,它们看起来像这样:

class C(name: String) {
  def this(i: Int) = this(i.toString)
}

(原因是忘记在备用构造函数中正确初始化事物是错误和额外样板的重要来源。通过强制所有内容通过单个主构造函数,当您只需要一个构造函数时,语法更简单,并且初始化错误不太可能。)