以此题为例:
给定如下一个Java源文件Child.java,编译并运行Child.java,以下结果正确的是(B )。
class Parent1 {
Parent1(String s){
System.out.println(s);
}
}
class Parent2 extends Parent1{
Parent2(){
System.out.println("parent2");
}
}
public class Child extends Parent2 {
public static void main(String[] args) {
Child child = new Child();
}
}
A. 编译错误:没有找到构造器Child()
B. 编译错误:没有找到构造器Parent1() //因为当我们给出了构造方法,系统将不再提供默认的无参构造函数
C. 正确运行,没有输出值
D. 正确运行,输出结果为:parent2
为什么答案是没有找到构造方法Parent1()呢!
在继承关系中,子类继承父类,**子类的构造方法中默认在第一行调用父类的无参构造方法(super();)**在此题中,父类写了有参的构造方法,就不会有默认的无参构造方法了,因此找不到构造方法Parent1()。