如何在某些条件下调用超级构造函数?

时间:2016-01-22 11:21:22

标签: java

这是否可以在某些条件下调用超级构造函数?我有以下代码

private static final class AuditDataTable extends AuditDataModel<DiscrepanciesVO> {

        private AuditDataTable (){
            super();       
        }
}

但是当一些super()类变量为Boolean时,我会想要调用true。我如何实现这一目标?

现在super()以上会调用此

 public AuditDataModel() {
        super();
        AuditResulstBean.setAuditResultRowCount(0);
        AuditResulstBean.setAuditResultRowCheck(false);
    }

但我希望在某些条件为super()时未调用顶级类false构造函数。

2 个答案:

答案 0 :(得分:0)

这不好,但它有效(不是你的问题的直接答案,而是你的问题的解决方案)。你必须在之前选择,你初始化哪个构造函数,因此你不需要依赖你的super。请注意,doSuper永远不会被使用,决策点也会被反击。按要求提供了一个几乎完整的工作示例:

private static final class AuditDataTable extends AuditDataModel<DiscrepanciesVO> {

    private AuditDataTable(boolean doSuper){
        super();
    }

    private AuditDataTable(){
        //other constructor
    }

    AuditDataTable getAuditDataTable(boolean useSuper){
        AuditDataTable auditDataTable;
        if(useSuper)
            auditDataTable = new AuditDataTable(true);
        else
            auditDataTable = new AuditDataTable();
        return auditDataTable;
    }
}

答案 1 :(得分:0)

在任何情况下,构造函数都会调用超级构造函数。

选择调用它/不要调用它的问题是不好问。

看到:

public class UpperClass {
public UpperClass()
{   
System.out.println("UpperClass");
}
public UpperClass(int a)
{
System.out.println("UpperClass 1");
}
}

并且

public class LowerClass extends UpperClass {
    public LowerClass()
    {
    super(1);
    System.out.println("LowerClass");
    }
}

没有或使用super(1),在创建LowerClass对象时,您会得到:

  

高年级

     

LowerClass

  

UpperClass 1

     

LowerClass

然后问题是:你想要哪一个超级构造函数,用哪个标准?

然后

1你必须有2个(或更多)超级构造函数,或者只有一个有参数

2你必须将这个标准从子类传递给超类