在子类实例化中使用替代超类构造函数

用户名

我有一个带有两个构造函数的基类,以及一个具有一个构造函数的子类。是否可以使用第二个基类构造函数实例化子类?

示例代码:

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)

这将是解决此问题的唯一/常用方法,还是有一些更聪明的方法来减少复制和过去的代码?(因为我有很多相同样式的子类)

[编辑]为了澄清,第二个构造函数在每个子类相同的,因此,我想有它在基类中实现一次。但是,仍然必须在每个子类中放置另一个构造函数将以某种方式无法实现此目的,因此,我在基类中不会只有两个构造函数,而在所有子类中都没有。

提姆

是否可以使用[second]基类构造函数实例化子类?

没有。

您永远不能使用超类构造函数来创建子类的实例。您必须为要创建的类调用构造函数。子类构造函数必须为超类调用构造函数,但不能直接调用它。

所以你可以这样做的原因

val myAboveCondition = new RuleConditionAbove(rule, "bla", 10, true, false)

RuleConditionAbove具有这些参数的构造函数。它与RuleCondition具有相同参数的构造函数无关

以及您无法执行此操作的原因

val myAboveCondition = new RuleConditionAbove(rule, "bla", RuleValue(...), true, false)

RuleConditionAbove没有带有这些参数的构造函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用超类的构造函数创建子类的实例

如何使用超类构造函数创建子类的实例?

子类调用基类构造函数,然后在子类Arduino C ++中使用基类的实例方法

Java如何使用超类构造函数设置子类实例变量

使用初始化列表和超类构造函数声明子类构造函数的正确方法

为什么允许使用子类的构造函数实例化父类对象?

超类子类构造函数java

子类调用超类构造函数

在构造函数中使用派生类实例化基类引用

从超类的构造函数中调用子类的构造函数

从基类构造函数创建子类实例

对子类实例使用超类类型

在子类中初始化超类变量(构造函数中需要)

使用模板化构造函数实例化非模板类

使用COM的参数化构造函数实例化类

如何在构造函数的super()方法调用中使用子类变量(this)初始化其他类?

如何在另一个 Python 类构造函数中使用 __enter__ 方法实例化 Python 类

使用私有构造函数来防止类的实例化?

如何实例化使用构造函数扩展类的特征

使用构造函数的泛型和/或对象返回超类或子类

使用子类对象访问超类函数

Java:从超类构造函数中的子类调用的方法

从Java中的子类构造函数调用超类

Java超类变量和子类复制构造函数问题

java子类:从抽象超类继承的多个构造函数

在超类构造函数中指定哪个子类

部分模拟子类的方法使其绕过超类构造函数

在私有对象中使用私有构造函数并使用方法实例化类有什么好处?

实例化超类的python中的子类化