求一段JAVA小程序输出内容

class Father{
static Son son=new Son();
static int k=1;
public Father(){
System.out.println("我是父类构造函数");
out();
}
public void out(){
System.out.println(k++);
}
}
class Son extends Father{
static Father fa=new Father();
static int i;
public Son(){
System.out.println("我是子类构造函数");
out();
}
public void out(){
System.out.println(i++);
}
}
public class Test {
public static void main(String[] args){
Son son=new Son();
}
}
不要运行结果。。。能给个解释就好了

首先是static关键字,初始化类时会先初始化static修饰的方法和属性,并且static语句块会优先执行。
然后是运行过程。
实例化son类,son类中有成员变量father并且使用new关键字初始化,此时调用father类构造函数,son类并未完成初始化,father类有成员变量son并且使用new关键字初始化,此时调用son类构造函数,son中的father成员变量会再一次跳转到father类。同上追问

先初始化父类static Son son=new Son();这时创建新的Son类
然后初始化子类static Father fa=new Father();这时创建新的Father类并实例化父类中的static int k=1;
然后调用父类构造函数,并执行out()方法;那么这时候的out()是子类的还是父类的?

温馨提示:答案为网友推荐,仅供参考