これが以前に発生した場合は申し訳ありませんが、これに関する別のスレッドは見当たりませんでした。しかし、もしあれば、私にリンクを教えてください。
ここに簡単なプログラムがあります。実行すると、「 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 フィールドが削除されると思うからです。
しかし、バーにキャストされた後、 f が固執しているようです。誰かがこれがなぜなのか説明できますか?