子类继承父类,代码执行顺序的介绍

今天看到一道面试题:

父类:

package test; 
public class FatherClass 
{ 
public FatherClass() 
{ 
System.out.println("FatherClass Create"); 
} 
} 

 

子类: 

package test; 
import test.FatherClass; 
public class ChildClass extends FatherClass 
{ 
public ChildClass() 
{ 
System.out.println("ChildClass Create"); 
} 
public static void main(String[] args) 
{ 
FatherClass fc = new FatherClass(); 
ChildClass cc = new ChildClass(); 
} 
} 

请问输出的结果是什么?

答案

FatherClass Create 
FatherClass Create 
ChildClass Create

这道题考察的是关于子类继承父类代码执行顺序的问题
首先,创建一个对象,就要调用其构造方法,来初始化成员函数和成员变量。子类拥有父类的成员变量和成员方法,所以子类必须调用父类的构造方法,否则从父类继承过来的成员变量和成员方法得不到正确的初始化。子类对象在创建时默认调用父类的无参数的构造方法,此调用子类不必显式写出来,但是如果父类中没有无参的构造方法,则必须在子类的构造方法中的第一句调用父类有参的构造方法 ,并且要把参数传递给父类的构造方法。

如:

父类:

public class Father 
{ 

public Father(int i) 
{ 
System.out.println("有参数的:FatherClass Create"); 
} 


} 

*父类中没有提供无参构造方法

子类:

public class Child extends Father 
{     
public Child() 
{ 
    super(5);//这里必须是子类构造方法的第一行,否则编译报错
System.out.println("ChildClass Create"); 
} 
public static void main(String[] args) 
{ 
Father fc = new Father(2); 
Child cc = new Child(); 

} 
} 

这时输出:

有参数的:FatherClass Create
有参数的:FatherClass Create
ChildClass Create

猜你喜欢

转载自www.cnblogs.com/newbie273/p/11728339.html