子类在继承父类的构造方法时,默认会隐式调用。即在编译时默认加入:
子类构造方法名(){
super(); //super关键字调用父类的构造方法
}
这个特性决定了,如果父类里显示地声明了构造方法,并附有参数列表的话,子类必须对其进行显式的调用,否则子类会因为找不到相应的父类的构造方法而出错。
这个规则对于一般类适用,对于抽象类也适用。编程举例如下:
class test{ //父类test
void run(){ //一般方法
}
public test(int i){ //父类的构造方法
System.out.println("test");
}
}
public class test1 extends test{
/*
test1(){ //子类的构造方法
super(55); //在子类的构造方法中,对父类的构造方法进行显式调用,参数列表必须符合,否则会出错
}
*/
void run(){
}
public static void main(String[] args){
}
}
当然,如果父类中的构造方法有多个,其中有一个是无参的,那么子类可以选择不显式调用父类的构造方法。因为系统会默认选择那个无参的构造方法。
从这里可以看出,了解JVM的工作机制对于学习Java开发还是很有必要的。今后还要多学习一些这方法的知识。