2012-12-26 64 views
0

我打电话给超类的参数化构造函数,然后它也抛出编译时错误,如没有默认构造函数为什么?因为根据程序我没有调用默认的构造函数。默认和参数化构造

class Sup 
{ 
    public Sup(String s) 
    { 
     System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
     System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    { 
     Sup s2=new Sup("pavan"); 
    } 
} 
+1

我以为'b'是'c'之前的东西,但它看起来很像'Java'! –

回答

2

您需要定义的超类的默认构造函数,因为除非另有规定的基类的构造函数会试图调用超类,在你的情况下,超类没有参数的构造函数,所以你得到一个编译错误。

class Sup 
{ 
    public Sup(){} 

    public Sup(String s) 
    { 
     System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
     System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    { 
     Sup s2=new Sup("pavan"); 
    } 
} 

或对使用super()父类的构造函数(S)和你的情况下,显式调用的参数化构造super("some string")

class Sup 
{ 
    public Sup(String s) 
    { 
     System.out.println("super"); 
    } 
} 

class Sub extends Sup 
{ 
    public Sub() 
    { 
     super("some string"); 

     System.out.println("sub class"); 
    } 

    public static void main(String arg[]) 
    { 
     Sup s2=new Sup("pavan"); 
    } 
} 
+0

您无法重写构造函数。构造函数不会被继承,因此它们不能被覆盖。 – Kamil

+0

你是对的我的意思是覆盖,但它没有意义,所以已经删除它 –

1

你的子()构造函数调用默认的构造函数(这是如果你没有在你没有提供的Sup类中调用super()或者在你的构造函数的第一行调用另一个构造函数)您应该在Sub()构造函数中添加对Sup(String s)的调用,或者在Sup类中添加默认的no-param构造函数。