类属性和构造函数 在继承关系中的执行顺序:
class A { public String ss="a"; public A() { System.out.println("Con-A:"+ss); fun(); } public void fun() { System.out.println("fun-a:"+ss); } } public class B extends A{ public String ss="B"; public static void main(String[] args) { B b= new B(); //A a = new A(); } public B() { System.out.println("Con-B:"+ss); fun(); } public void fun() { System.out.println("fun-B:"+ss); } }
打印出来的结果是:
Con-A:a
fun-B:null // 估计你也没想到吧?
Con-B:B
fun-B:B
如果将main方法改造下:
public static void main(String[] args) { //B b= new B(); A a = new A(); }
输出结果是:
Con-A:a
fun-a:a
上面红色处,谁能给出原因?
经过断点调试,原来是在A构造里调用的fun 是B类的fun(被重写了)。而 至于 null ,为什么,谁能解释?