类属性和构造函数 在继承关系中的执行顺序

类属性和构造函数 在继承关系中的执行顺序:

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 ,为什么,谁能解释?

猜你喜欢

转载自kangzye.iteye.com/blog/2357490