我有一个父类class A和一个子类class C extends A.
A a=new A();
C c=(C)a;
Run Code Online (Sandbox Code Playgroud)
这给了我错误.为什么?
如果我的代码是
A a=new A();
C c=new C();
c=(C)a;
Run Code Online (Sandbox Code Playgroud)
这很好用.
现在我的c变量可以访问所有方法... C中的那些或B类中的变量?
它给你一个错误,因为a 它不是一个实例C- 所以你不能让它垂头丧气.想象一下,如果这是允许的 - 你可以这样做:
Object o = new Object();
FileInputStream fis = (FileInputStream) o;
Run Code Online (Sandbox Code Playgroud)
当您尝试从流中读取时,您会发生什么?您希望它从哪个文件中读取?
现在是第二部分:
A a=new A();
C c=new C();
C c=(C)a;
Run Code Online (Sandbox Code Playgroud)
这将无法正常工作 - 一开始它甚至不会编译,因为你声明相同的变量(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
Run Code Online (Sandbox Code Playgroud)