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

怎么会编译不同过呢
Java code

class A
{
    A(int i)
    {
        System.out.println("i="+i);
    }
}
public class Execise_6_8 extends A
{
    Execise_6_8()
    {
    }
    Execise_6_8(int i)
    {
        super(i);
    }
    public static void main(String []args)
    {
        Execise_6_8 b=new Execise_6_8(5);
    }
}
程序为什么会编译不通过呢:

D:\my java>javac Execise_6_8.java
Execise_6_8.java:11: 找不到符号
符号: 构造函数 A()
位置: 类 A
        {
        ^
1 错误

不是当调用导出类的无参构造函数时才会首先调用基类的无参构造函数的吗,这里是直接调用的Execise_6_8(5)啊怎么会不通过呢




------解决方案--------------------
Execise_6_8()
{
}

需要无参父类构造方法
------解决方案--------------------
程序编译的时候Execise_6_8的无参构造方法运行完理论上需要调动父类的构造方法,当没有显示申明调用父类构造方法的时候程序默认调用父类的无参构造方法,而此时的A类没有无参构造方法,所以就出错了。
Java code
    Execise_6_8() {
        super(5);
    }

------解决方案--------------------
在A类加上空的构造方法,或者把Execise_6_8的空的构造方法去掉就行了。