【发布时间】:2019-05-29 19:41:25
【问题描述】:
我有一个有两个构造函数的基类和一个有一个构造函数的子类。是否可以使用第二个基类构造函数来实例化子类?
示例代码:
abstract class RuleCondition(rule:Rule, field:String, equal:Boolean, inverted:Boolean)
{
// alternate constructor with RuleValue instead of static comparation value
def this(rule:Rule, field:String, ref:RuleValue, equal:Boolean = false, inverted:Boolean = false) = ???
}
class RuleConditionAbove(rule:Rule, field:String, comparationValue:Long, equal:Boolean = false, inverted:Boolean = false)
extends RuleCondition(rule, field, equal, inverted)
{
// ...
}
现在我可以这样做了:
val myAboveCondition = new RuleConditionAbove(rule, "bla", 10, true, false)
但我不能这样做:
val myAboveCondition = new RuleConditionAbove(rule, "bla", RuleValue(...), true, false)
因为RuleCondition 基类的替代构造函数不可见。一旦我将它添加到子类中,它将可见:
def this(rule:Rule, field:String, ref:RuleValue, equal:Boolean = false, inverted:Boolean = false) = this(rule, field, ref, equal, inverted)
这是解决此问题的唯一/常用方法,还是有更智能的方法可以减少复制和过去的代码? (因为我有很多相同模式的子类)
[edit] 澄清一下,第二个构造函数 在每个子类中都是相同的,因此我希望它只在基类中实现一次。 然而,仍然必须在每个子类中放置另一个构造函数会以某种方式破坏这个目的,因此我不会在基类中有两个构造函数,而只会在所有子类中。
【问题讨论】:
标签: scala inheritance constructor polymorphism superclass