一、代码运行:
父类:
public class Animal {
static{
System.out.println("父类的静态方法");
}
{
System.out.println("执行父类的构造代码块");
}
public Animal(){
System.out.println("执行父类的构造方法");
}
public void A(){
System.out.println("执行父类的A方法");
}
}
子类:
public class Cat extends Animal{
static{
System.out.println("子类的静态方法");
}
{
System.out.println("执行子类的构造代码块");
}
public Cat(){
System.out.println("执行子类的构造方法");
}
@Override
public void A() {
System.out.println("执行子类的A方法");
}
public static void main(String[] args) {
Cat c = new Cat();
c.A();
}
}
执行结果:
父类的静态方法
子类的静态方法
执行父类的构造代码块
执行父类的构造方法
执行子类的构造代码块
执行子类的构造方法
执行子类的A方法
二、分析
可以看出几个重点:
1、静态方法首先执行,先父类,后子类;
2、其次,执行构造代码块和构造方法,先父类,后子类;
3、最后,执行子类的方法