我有一个父类 class A
和一个子类 class C extends A
。
A a=new A();
C c=(C)a;
这给了我错误。为什么?
另外如果我的代码是
A a=new A();
C c=new C();
c=(C)a;
这很好用。
现在我的c
变量可以访问哪些方法..C 中的方法还是B 类中的方法?
最佳答案
它给你一个错误,因为 a
不是 C
的实例 - 所以你不能向下转换它。想象一下,如果允许这样做, - 您可以:
Object o = new Object();
FileInputStream fis = (FileInputStream) o;
当您尝试从流中读取时,您期望发生什么?您希望它读取什么文件?
第二部分:
A a=new A();
C c=new C();
C c=(C)a;
这将不 正常工作——一开始它甚至不会编译,因为你声明同一个变量 (c
) 两次;如果您修复了该错误,当您尝试将 A
的实例转换为 C
时,您仍然会得到一个异常。
然而,这段代码是真正有效的:
A a = new C(); // Actually creates an instance of C
C c = (C) a; // Checks that a refers to an instance of C - it does, so it's fine
关于java - 向上转型向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489619/