如何在某些情况下调用超级构造函数?

如何在某些情况下调用超级构造函数?

问题描述:

这可能在某些情况下调用超级构造函数吗?我有下面的代码如何在某些情况下调用超级构造函数?

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不叫。

+3

没有。无论你是否自己添加超级调用,它都必须是构造函数的第一件事。 – Stultuske

+0

'super()'调用总是必须是构造函数中的第一个调用。你无法避免它。 – LordAnomander

+1

虽然你可以调用'super(boolean)'(并且在你的超类中创建相应的构造函数),并且如果它是'true' /'false'就做任何你想做的事情。 – LordAnomander

这不好,但它的工作原理(不是直接回答你的问题,而是解决你的问题)。你必须选择之前,你初始化的构造函数,因此你不需要依赖你的超级。请注意,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

这是他的构造函数,他可以从内部调用它(这就是为什么我添加的构造函数也是私有的)...请认为在投票之前! – ctst

+0

旧的回答没有用,因为'this'是最后的......我的歉意。 – ctst

+0

@ctst它是如何工作的人 –

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

选择叫它/不叫它的问题是坏的问。

看出:

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"); 
    } 
} 

没有或超(1),创建LowerClass对象时,你会得到:

高年级

LowerClass

高年级1个

LowerClass

接下来的问题是:哪一个超级构造你想要的,与标准是什么?

然后

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

2你必须从子类此标准传递到超