抱歉,如果以前出现过这种情况,但我没有看到有关此的其他线程。但是如果有的话,请给我链接。
这里我有一个简单的程序。当它运行时,它会打印出“6 4”
public static void main(String[] args) {
Foo foo = new Foo();
foo.t = 6;
foo.f = 4;
Bar b = new Foo();
ArrayList<Bar> list = new ArrayList<Bar>();
list.add((Bar) foo);
Foo foo2 = (Foo) list.get(0);
System.out.println(foo2.t + " " + foo2.f);
}
static class Bar {
int t;
}
static class Foo extends Bar {
int f;
}
这看起来很奇怪,因为我认为当我将 Foo 添加到列表时,它会删除 f 字段,因为列表包含没有 f 的 Bars。
但似乎 f 在被投射到 Bar 后仍然存在。有人可以解释这是为什么吗?