日期:2014-05-20 浏览次数:20698 次
class SuperClass{ private int n; SuperClass(int n){ System.out.println("SuperClass("+n+")"); this.n=n; } } class SubClass extends SuperClass{ private int n; SubClass(int n){ System.out.println("SubClass("+n+")"); this.n=n; } SubClass(){ super(300); System.out.println("SubClass()"); } } public class TestInherit{ public static void main(String args[]){ SubClass sc1=new SubClass(); } }
class SubClass extends SuperClass{ private int n; SubClass(int n){ System.out.println("SubClass("+n+")"); this.n=n; }
------解决方案--------------------
解释:当构造方法不明确调用父类中的构造方法时,JVM默认是调用父类的无参构造。
1、如上你的SubClass中第一个构造方法,未显示调用super,默认调用super(),因为父类不存在无参构造而报错;
2、如上你的SubClass中第二个构造方法,因为显示调用super,及调用父类的有参数构造,所以就不会去调用默认的无参构造super(),所以不会报错。
3、同理,如上SuperClass类中未显示调用super,也是调用Object类的无参构造。
以上仅个人观点。
------解决方案--------------------
private int n;
SubClass(int n){
System.out.println("SubClass("+n+")");
this.n=n;
}
改为:
private int n;
SubClass(int n){
super(n);//或其它的一个int数
System.out.println("SubClass("+n+")");
this.n=n;
}