Problem
以下程序输出什么?解释原因。
public class TestSub {
private String a = "父类的属性值";
public TestSub() {
call();
}
public void call() {
System.out.println("父类call方法调用" + a);
}
static class TestSup extends TestSub {
private String a = "子类的属性值";
public void call() {
System.out.println(a);
}
}
public static void main(String[] args) {
TestSub ts = new TestSup();
}
}
Answer
运行结果为null,子类对象在创造时调用父类构造器,父类构造器调用call方法,call方法被子类重写,子类重写的方法中调用的a是子类的a,又由于当前在创造父类对象,所以子类的a没有被赋值,所以输出null。