日期:2014-05-20  浏览次数:20783 次

已经有了一个有参构造方法 如果没有设定无参构造方法 会出错么
class superclass{

superclass()
{
System.out.println("superclass");

}
superclass(int n)
{
System.out.println("superclass int n");

}
}
class subclass extends superclass{

subclass()
{
super(100);
System.out.println("subclass");

}
subclass(int n)
{
System.out.println("subclass int n");

}


}
public class sp{
public static void main(String[] args)
{
subclass x=new subclass();

}


}


如果将基类中无参构造方法去掉 则会报错 但是我在子类无参构造方法中用了super 既然没有用到基类无参构造方法 为什么报错

------解决方案--------------------
Java code
superclass(int n)
{
System.out.println("superclass int n");

}

------解决方案--------------------
你如果去掉父类的无参构造器。
你的子类有参函数
subclass(int n)
{
System.out.println("subclass int n");

}
在这里没有指明构造函数,就会使用默认构造函数(即无参构造器),虽然你没用这个构造函数实例化子类对象,你也给父类提供了有参构造函数用于实例化。不过在编译的时候,我估计处于安全考虑,编译程序会排查每个子类的构造函数是否隐式或显示调用的父类构造函数。
------解决方案--------------------
如果没有构造方法,虚拟机会默认一个无参构造方法
如果有构造方法,无论是有参的还是无参的,就不会有默认的无参构造方法
在这里你重写了父类的有参构造方法,却又调用父类的有参构造方法,所以报错
lz可以讲子类的有参构造方法去掉,或者将super(100);改成new subclass(100);
------解决方案--------------------
如果没有无参数构造器,子类必须显示的调用一个带参数的构造器。