当前位置: 技术问答>java相关
一个SCJP的问题,请解释一下~~~~~~~
来源: 互联网 发布时间:2015-04-13
本文导语: public class Company{ public Company(){ System.out.println("Company: 0"); } public static void main(String[] args){ Research research = new Research(1999); } } class Research extends Company{ public Research(int year){ System.out.println("Research: 1")...
public class Company{
public Company(){
System.out.println("Company: 0");
}
public static void main(String[] args){
Research research = new Research(1999);
}
}
class Research extends Company{
public Research(int year){
System.out.println("Research: 1");
}
}
为什么结果是:
Company: 0
Research: 1 ?
而不是:
Research: 1 呢?
public Company(){
System.out.println("Company: 0");
}
public static void main(String[] args){
Research research = new Research(1999);
}
}
class Research extends Company{
public Research(int year){
System.out.println("Research: 1");
}
}
为什么结果是:
Company: 0
Research: 1 ?
而不是:
Research: 1 呢?
|
隐含调用基类的构造函数
|
在Research类构造的时候,由于Research是Company的子类,所以先要构造Company,调用Company的构造方法,因此会先输出Company:0;然后构造完Company之后,调用自己的构造方法,因此后输出Reasearch:1
|
每一个对象在创建的时候 总是先要调用父类不带参数的的构造方法
|
如果子类的构造器没有显式的调用超类的任何构造器则会自动调用超类的默认构造器。
|
在用构造函数(new)创建一个对象时, 如果被调用的构造函数没有明显调用super(),则系统默认调用super(),也就是先调用父类的默认构造函数,.