package test;
public class Duotai {
public static void main(String[] args) {
Person p = new Teacher();
p.call();
}
}
class Person{
private String name;
public void call() {
System.out.println(name);
}
}
class Teacher extends Person{
private String name = "teacher";
}
这么一道面试题,咋一看很容易被唬住,以为输出结果是"teacher",但其实是null。
为什么?
很简单的,把成员变量name的修饰符改成public,结果还是一样的。
很简单,成员变量没有所谓的重写。父类和子类的name,完全是两个东西,不存在覆盖的说法。证明如图:
调用的call方法,因为子类没有覆盖,那调用的就是父类的版本,打印的name,就是父类里的。