首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

纠结一个简单的java小程序,该如何处理

2012-01-28 
纠结一个简单的java小程序本人菜鸟,下边这个是关于继承的一个程序Java codeclass SuperClass{private int

纠结一个简单的java小程序
本人菜鸟,下边这个是关于继承的一个程序

Java code
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();      }}

为什么明明有SuperClass(int n)这个带参数的父类构造函数,可是子类子类中用super(300)这个的时候会出错呢?这个程序为什么运行不了???

[解决办法]
Java code
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;
}

热点排行