2016-01-22 127 views
0

這可能在某些情況下調用超級構造函數嗎?我有下面的代碼如何在某些情況下調用超級構造函數?

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

回答

0

這不好,但它的工作原理(不是直接回答你的問題,而是解決你的問題)。你必須選擇之前,你初始化的構造函數,因此你不需要依賴你的超級。請注意,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它是如何工作的人 –

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

沒有或超(1),創建LowerClass對象時,你會得到:

高年級

LowerClass

高年級1個

LowerClass

接下來的問題是:哪一個超級構造你想要的,與標準是什麼?

然後

1必須具有2(或更多)超構造函數,或只有一個帶有參數

2你必須從子類此標準傳遞到超

相關問題