我想知道是否有人确切知道代码行发生时会发生什么:
class Class{}
class Math extends Class{}
class UseClasses{
public static void main (String[]args)
{
new Math(); //Line 8
(Class)new Math();// Line 9
}
Run Code Online (Sandbox Code Playgroud)
我完全理解"new keyword"在堆内存中充当对象实例创建者.但是,在前面的代码中,您可以看到第9行对此关键字(新)的使用不正常.第8行没关系并且编译得很好.但是第9行需要将内容分配给其他一些引用.因此,这意味着每次存在强制转换操作数时,在这种情况下(Class)new Math,将实例化新的引用(强调引用而不是对象).
它以这种方式工作吗?如果没有,你能解释一下为什么它在第8行编译得很好并且它在第9行中出错了吗?(显然由于铸造功能不在那里,但为什么不呢?)
由于第9行没有引用变量,编译器不认为此语句有效.
如果您具有对象本身的"更具体"类型的引用变量,则需要强制转换.例如,当您执行上传时,您不需要它:
Class obj = new Math();
Run Code Online (Sandbox Code Playgroud)
当你执行向下转换时,你需要一个明确的演员:
Class obj = new Math();
Math math = (Math) obj;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |