0

I am calling parametrized constructor of super class then also it is throwing compile time error such as no default constructor Why? Because as per the program i m not calling default constructor at all.

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

2 回答 2

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"); 
    } 
}
于 2012-12-30T15:24:46.590 回答
1

您的 Sub() 构造函数正在调用您未提供的 Sup 类中的默认构造函数(如果您不显式调用 super() 或在构造函数的第一行中调用同一类中的另一个构造函数,则会隐式完成)。您应该在 Sub() 构造函数中添加对 Sup(String s) 的调用,或者在 Sup 类中添加默认的无参数构造函数。

于 2012-12-30T15:25:31.600 回答