Scala - 创建类,继承部分构造函数参数

时间:2016-10-29 21:39:56

标签: scala class inheritance

在Scala中,我想创建一个抽象类,它接受一些“策略”参数(此处为myBase)和一个值参数(此处为myVal)。 我希望从该类继承,将strategy参数作为继承的一部分提供,并获取一个类(此处为Cls1),该类接受该值作为构造函数参数。

以下是我希望能够运行的代码:

abstract class Base(myBase: Int)(val myVal: Int) {
  val divVal: Int = myBase / myVal
}

class Cls1 extends Base(10) // myBase = 10
val obj1 = new Cls1(5) // myVal = 5
assert(obj1.divVal == 10/5)

不幸的是,我收到以下错误:

  

错误:构造函数Cls1的参数太多:()A $ A58.this.Cls1 lazy val obj1 = new Cls1(5)   错误:缺少类中的构造函数Base的参数列表基类Cls1扩展了Base(10)

请您解释一下如何在不重复逻辑的情况下完成此操作(此处为myBase / myVal)?

1 个答案:

答案 0 :(得分:3)

您可以要求myVal成为一个抽象字段,必须由任何入级类填写:

abstract class Base(myBase: Int) {
  val myVal: Int
  val divVal: Int = myBase / myVal
}

class Clazz(val myVal: Int) extends Base(10)

val clz = new Clazz(5)
assert(clz.divVal == 10 / 5)