我有3个班级:
public class Alpha {
public Number number;
}
public class Beta extends Alpha {
public String number;
}
public class Gama extends Beta {
public int number;
}
为什么下面的代码可以编译?而且,为什么测试通过而没有任何运行时错误?
@Test
public void test() {
final Beta a = new Gama();
a.number = "its a string";
((Alpha) a).number = 13;
((Gama) a).number = 42;
assertEquals("its a string", a.number);
assertEquals(13, ((Alpha) a).number);
assertEquals(42, ((Gama) a).number);
}
原文由 Kiril Kirilov 发布,翻译遵循 CC BY-SA 4.0 许可协议
成员变量不能像方法一样被覆盖。 The
number
variables in your classesBeta
andGama
are hiding (not overriding) the member variablenumber
of the superclass.通过强制转换,您可以访问超类中的隐藏成员。