父类引用指向子类对象,执行顺序为:父-子-父-父-子-子。
解释:若存在静态代码块,则先执行父类的静态代码块,再执行子类的静态代码块(父子);
然后执行父类的非静态代码块,父类的构造方法->子类的非静态代码块,子类的构造方法。
代码如下:
package com.yhzz.demo1;
public class Test1 {
public static void main(String[] args) {
Dad dad = new Baby();
}
}
class Dad{
//父类构造方法
Dad(){
System.out.println("父类的无参构造方法");
}
//父类静态代码块
static{
System.out.println("父类的静态代码块");
}
//父类非静态代码块
{
System.out.println("父类的非静态代码块");
}
}
class Baby extends Dad{
//子类非静态代码块
{
System.out.println("子类的非静态代码块");
}
//子类构造方法
Baby(){
System.out.println("子类的构造方法");
}
//子类静态代码块
static {
System.out.println("子类的静态代码块");
}
}
输出结果为: