2013-04-04 18 views
8

benNeden süper sınıf varsayılan yapıcısı bir 'throws' yan tümcesi olduğunda bildirilmeyen özel durum alıyorum? Ben çalıştırdığınızda

Kodum aşağıda gösterildiği gibi kod aşağıdaki bildirilmemiş istisna alıyorum

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

aşağıdaki hata var: Sub.java:6 yer: bildirilmemiş istisna java.lang.Exception varsayılan yapıcı
public class Alt Süper {
1 hata uzanır

cevap

10

Sen Sub için varsayılan bir kurucu tanımlı değil ve Süper işaretli bir istisna bildiriyor. düzeltmek için o Sub bu kurucu ekleyin:

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

sayesinde, –

+2

Değil büyük bir anlaşma sonucu var ama super açık çağrı gerekmez() - derleyici otomatik olarak yapar. – acvcu

2

Eclipse aşağıdaki kodu raporlama ve kodu derlemek reddediyor.

Varsayılan yapıcı, örtülü süper kurucu tarafından atılan istisna türü Kural dışı durumu gerçekleştiremez.

Açık bir kurucu tanımlamalı, açık bir yapıcı tanımlamanız gerekir.

2

Varsayılan olarak tüm sınıf varsayılan kurucu, süper sınıf varsayılan yapıcısını çağırır. Artık süper sınıf yapıcınız bir istisna atarken, alt sınıf yapıcısı süper sınıf yapıcısını çağırdığında istisna işlemek veya atmak gerekir.
Artık derleyiciniz herhangi bir kurucudan bahsetmediniz, bu yüzden derleyici bir varsayılan kurucu oluşturacaktır ve super() öğesini istisna atar ve yapıcınız herhangi bir istisna atamadı/işlemez, derleme başarısız olur.

2

Jalynn2'ye katılıyorum. Başka bir çözüm, bu kurucuda özellikle bir şey yükseltmemeniz nedeniyle RuntimeException için Özel Durum yapmaktır. Kişisel ans için

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