类属性和构造函数 在继承关系中的执行顺序:
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 ,为什么,谁能解释?