我有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);
}
而且?它的作品如此。如果你需要重寫,你應該使用setter/getter方法。公共領域幾乎總是一個壞主意。 – kan 2012-02-23 14:33:05