我正在调用超类的参数化构造函数然后它也抛出编译时错误,例如没有默认构造函数为什么?因为根据程序我根本不调用默认构造函数。
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");
}
}
答案 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构造函数。