2012-11-20 57 views
4

我正在做一個任務,我被告知需要創建一個類(稱爲ClassB),該類必須擴展給定的類(稱爲ClassA)。唯一的問題是,ClassA的構造函數內部的代碼可能會拋出一個異常,所以當我爲ClassB創建我的構造函數時,我試圖圍繞對super()的調用包裝一個try/catch塊,但當然,由於super必須是第一個電話,所以不起作用。調用超級需要try/catch

我該如何解決這個問題?

+6

在您的子類構造函數中添加一個throws子句.. –

+0

@RohitJain它確實有效。但爲什麼?它只適用於構造函數或通常適用於每種方法? – shen

回答

6
public ClassB extends ClassA { 
    public ClassB() throws MyClassAException { 
     super(); 
    } 
} 
1

您可以添加例外的拋出你的子類的構造函數的條款: -

class ClassA { 
    ClassA() throws Exception { 

    } 
} 
public class Demo extends ClassA { 
    Demo() throws Exception { 
     super(); 
    } 

    public static void main(String[] args) { 
     try { 
      Demo d = new Demo(); // Handle exception here. 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

當然是正確的,但是不要命名類的大寫版本的關鍵字(儘管它是合法的) – durron597

+0

@ durron597。當然。將編輯它。 –

0

ClassB應該有一個靜態方法

public static ClassB makeClassB() { 
    try { 
     return new ClassB(); 
    } 
    catch(Exception exc) { 
     // whatever logic you are currently performing to swallow 
     // presumably you have some default ClassB to return as part of this logic? 
    } 

將包裝的ClassB建設嘗試/趕上。客戶端代碼將調用makeClassB()並且構造函數爲ClassB將爲private並拋出。