向上倾斜向下倾斜

Kra*_*ken 2 java inheritance

我有一个父类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类中的变量?

Jon*_*eet 6

它给你一个错误,因为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)两次; 如果你修复错误,你会仍然在尝试投的实例得到一个异常AC.

但是,此代码真正有效:

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)