我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁。
下面是一个简单的继承,来查看代码的执行顺序:
-
package test;
-
class Person{
-
static{
-
System.out.println("父类的静态块");
-
}
-
Person(){
-
System.out.println("父类的构造方法");
-
}
-
{
-
System.out.println("父类的普通方法");
-
}
-
}
-
class Student extends Person{
-
static{
-
System.out.println("子类的静态块");
-
}
-
Student(){
-
System.out.println("子类的构造方法");
-
}
-
{
-
System.out.println("子类的普通方法");
-
}
-
}
-
public class Test {
-
public static void main(String[] args) {
-
Student s=new Student();
-
}
-
}
运行结果为:
可以看出代码的执行顺序是:
父类静态块中方法----子类静态块中方法----父类的普通方法---
父类的构造方法---子类的普通方法---子类的构造方法