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

这段代码提示 cannot find
Java code

class A {
    A(int i) {
    System.out.println("class A");
    System.out.println("int i = " + i);
    }
}

class B {
    B(int i) {
    System.out.println("class B");
    System.out.println("int i = " + i);
    }
}

class C extends A {
    int c;
    String s;
    C(int c) {
    this.c = c;
    }
    B b = new B(2);
}

public class Abc {
    public static void main(String[] args) {
    C c = new C(3);
    }
}



------解决方案--------------------
因为 A 没有缺省构造方法,所以 C 的构造方法必须显式调用 A 的构造方法:
Java code
C(int c) {
    super(c);    // 显式调用 A 的构造方法
    this.c = c;
}

------解决方案--------------------
你这编译能通过吗,都有一个构造方法了,子类又来一个构造方法,编译肯定报错的,没有明确调用哪个构造器
------解决方案--------------------
Java code

class C extends A {
    int c;
    String s;
    C(int c) {
    super(c);//添加这句,由于父类的构造方法不是默认构造方法,所以子类构造方法必须显示先调用父类的构造方法(没有父亲,哪来儿子)
    this.c = c;
    }
    B b = new B(2);
}

------解决方案--------------------
探讨

也就是说在基类没有default constructor的情况下,此基类的子类的构造方法必须显式调用基类的构造方法?