【发布时间】:2014-01-04 21:01:03
【问题描述】:
代码如下:
Base b = new Derived(); // Upcasting
// Some actions
Derived d = (Derived)b; // Downcasting
据我了解,引用就像您正在查看某块内存的模板。向上转型只是缩小了模板,因此您无法访问使用 Derived 类添加的成员。而这里的向下投射又将模板扩展回来。
问题是:
由于没有保留对类型派生部分的引用,因此只保留了 Base。 GC 的某些操作或活动是否会在向下转换发生时擦除或覆盖曾经包含 Derived 成员的内存块?换句话说,向下转换Derived d = (Derived)b 会失败吗?
【问题讨论】:
-
可以,但前提是
b不是Derived。 -
谢谢,我知道了。但是类型的 Derived 部分是否会丢失,因为没有对它的引用只保留了 Base 部分。