子类继承父类时方法的调用顺序
为了搞清当一个子类继承父类并调用了子类的某个方法时,在父类和子类中各个代码块的执行顺序
我们自己创建一个父类Parent和一个子类Child,代码如下:
父类代码:
1 package ParentAndChild; 2 3 public class Parent { 4 static{ 5 System.out.println("父类静态代码块"); 6 } 7 8 { 9 System.out.println("父类普通代码块"); 10 } 11 12 public Parent() { 13 super(); 14 System.out.println("父类构造器方法"); 15 } 16 17 public void A(){ 18 System.out.println("父类A方法"); 19 } 20 21 }
子类代码:
package ParentAndChild; public class Child extends Parent{ static{ System.out.println("子类静态代码块"); } { System.out.println("子类普通代码块"); } public Child() { super(); System.out.println("子类构造器方法"); } public void A(){ System.out.println("子类A方法"); } public static void main(String[] args){ Child child =new Child(); child.A(); } }
输出结果:
结论:当一个子类继承父类并调用了子类的某个方法时代码块的执行顺序为
1)父类静态代码块
2)子类静态代码块
3)父类普通代码块
4)父类构造器方法
5)子类普通代码块
6)子类构造器方法
7)子类A方法
也就是说遵循的原则如下:
1.静态(变量)对象优先于非静态(变量)对象
2.父类优先于子类
3.按照成员表明量定义顺序进行初始化