默认和参数化构造函数

时间:2012-12-26 05:04:16

标签: java

我正在调用超类的参数化构造函数然后它也抛出编译时错误,例如没有默认构造函数为什么?因为根据程序我根本不调用默认构造函数。

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

2 个答案:

答案 0 :(得分: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()显式调用超类构造函数,对于参数化构造函数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"); 
    } 
}

答案 1 :(得分:1)

您的Sub()构造函数正在调用默认构造函数(如果您未在Sup类中显式调用super()或在构造函数的第一行中调用另一个构造函数,则隐式执行),您没有提供它。您应该在Sub()构造函数中添加对Sup(String s)的调用,或者在Sup类中添加默认的no-param构造函数。