向下转换错误(Java).下面的代码似乎不起作用,任何解释都将不胜感激



我最近阅读了Java中的上下转换和下转换。我尝试了以下代码,但似乎不起作用。

class Super {
void print() {
System.out.println("Super");
}
}
class Sub extends Super {
void print() {
System.out.println("Sub");
}
}
class Program {
public static void main(String[] args) {
Super obj = new Super();
obj.print();
Sub obj1 = (Sub) obj;
obj1.print();
}
}

感谢您的帮助。

Subclass可以做SuperClass可以做的任何事情,反之亦然,SubClass可以为自己实现一些方法,因此Subclass不是SuperClass,如果调用强制转换运算符,则会抛出ClassCastException

让我们举一个一般的例子,你可以在的任何地方应用它

A b = (C)d // here A and C are classes and b and d are references 

现在在编译时,编译器检查是AC的类型相同是CA的子级,如果两个条件中的任何一个失败,则会得到编译时错误inconvertable types

在您的情况下,第一个条件为true,因此您的代码编译良好。

现在,在运行时,JVM检查d的底层类型是否相同,或者d是否是C的子级。在您的情况下,第二个条件失败,因此您获得ClassCastExceptoin

你正在进行的向下转换可能发生在基元的情况下"这被称为缩小基元">

如果我们以正方形和矩形为例,我们知道正方形是矩形,但矩形不是正方形。因为通常情况下,向下转换会丢失信息,JVM显然不希望发生这种情况,所以它会导致程序在运行时失败。

相关内容

最新更新