今天在测试接口时遇到了一个多态的问题,实际上就是 子类继承父类,子类对象指向父类,向上转型导致的问题
场景再现:
static class Father {
private String name;
}
static class Son extends Father {
private String name = "son";
}
static class Test {
public static void main(String[] args) {
List<Father> fathers = new ArrayList();
List<Son> sons = new ArrayList();
sons.add(new Son());
fathers.addAll(sons);
for (Father father : fathers) {
System.out.println(father.name);
}
}
}
根据java 多态的特性,此时打印出的应该是父类的属性值:null
但是由于疏忽,误以为会拿到子类已有的值,导致代码报 NPE异常,特此记录