【问题标题】:Scala Child Class Constructor is not being called from Java Parent Class没有从 Java 父类调用 Scala 子类构造函数
【发布时间】:2014-11-22 19:20:11
【问题描述】:

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

这是 Java 类(父类):

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

这是 Scala 类(子):

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() = {
     //...
  }
}

【问题讨论】:

    标签: java scala inheritance


    【解决方案1】:

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

    无论如何,如果你真的需要备用构造函数,它们看起来像这样:

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

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

    【讨论】:

    • 感谢链接,这是有道理的:“正如我之前提到的,类的主体是主要的构造函数”
    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多