2013-04-04 13 views
8

sto ottenendo un'eccezione non dichiarata quando ho eseguito il seguente codicePerché ricevo un'eccezione non dichiarata quando il costruttore predefinito di super classe ha una clausola 'getta'?

Il mio codice è il seguente

class Super {  
    public Super() throws Exception {  
    System.out.println("Super Class");  
    }  
} 

public class Sub extends Super {  
    public static void main(String[] args) throws Exception {  
    Sub s = new Sub();  
    }  
} 

seguente errore ottenuto: Sub.java:6: non dichiarata java.lang.Exception eccezione costruttore di default
public class Sub estende Super {
1 errore

risposta

10

non hai definito un costruttore predefinito per Sub, e Super sta riportando un'eccezione controllata. Per risolvere il problema aggiungere questo costruttore per Sub:

public Sub() throws Exception { 
    super(); 
} 
+0

Grazie per la tua ans, ho avuto provocare –

+2

Non è un grosso problema, ma non è necessario l'invito esplicito a super() - il compilatore lo fa automaticamente. – acvcu

2

Eclipse sta riportando il codice qui sotto e si rifiuta di compilare il codice.

Il costruttore predefinito non può gestire il tipo di eccezione Eccezione generata dal super costruttore implicito. Deve definire un costruttore esplicito

Quindi, è necessario definire esplicitamente un costruttore che lo fa.

2

Il costruttore predefinito di tutte le classi chiama per impostazione predefinita il costruttore predefinito di super classe. Ora, quando il costruttore di super classi lancia un'eccezione, quando il costruttore della sottoclasse chiama il costruttore super-classe che deve gestire l'eccezione o lanciarlo.
Ora nella tua classe non hai menzionato alcun costruttore, quindi il compilatore creerà un costruttore predefinito e chiamerà super(), poiché super() genera un'eccezione e il tuo costruttore non ha gettato/gestito alcuna eccezione, non riuscirà a compilare.

2

Sono d'accordo con Jalynn2. Un'altra soluzione consiste nel fare eccezione a RuntimeException poiché non si sta generando nulla in particolare in questo costruttore.

class Super { 
    public Super() throws RuntimeException {  
    System.out.println("Super Class");  
    } 
} 
Problemi correlati