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 既然没有用到基类无参构造方法 为什么报错
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 既然没有用到基类无参构造方法 为什么报错
{
System.out.println("superclass int n");}
因为上面的构造方法没有显示调用父类的有参构造方法,所以默认调用其无参构造方法(相当于有个:super()语句),但你的父类没有这个无参构造函数,所以报错。
要想不报错,应该加上:super(n);
superclass(int n)
{
super(n); //加上这句。
System.out.println("superclass int n");}
subclass(int n)
{
System.out.println("superclass int n");}
subclass(int n)
{
super(n);
System.out.println("superclass int n");}
你的子类有参函数
subclass(int n)
{
System.out.println("subclass int n");}
在这里没有指明构造函数,就会使用默认构造函数(即无参构造器),虽然你没用这个构造函数实例化子类对象,你也给父类提供了有参构造函数用于实例化。不过在编译的时候,我估计处于安全考虑,编译程序会排查每个子类的构造函数是否隐式或显示调用的父类构造函数。
如果有构造方法,无论是有参的还是无参的,就不会有默认的无参构造方法
在这里你重写了父类的有参构造方法,却又调用父类的有参构造方法,所以报错
lz可以讲子类的有参构造方法去掉,或者将super(100);改成new subclass(100);