【发布时间】:2023-03-16 14:59:01
【问题描述】:
在 Java 中允许向上转换,但是向下转换会产生编译错误。
可以通过添加强制转换来消除编译错误,但无论如何都会在运行时中断。
在这种情况下,如果 Java 不能在运行时执行,为什么允许向下转换?
这个概念有什么实际用途吗?
public class demo {
public static void main(String a[]) {
B b = (B) new A(); // compiles with the cast,
// but runtime exception - java.lang.ClassCastException
}
}
class A {
public void draw() {
System.out.println("1");
}
public void draw1() {
System.out.println("2");
}
}
class B extends A {
public void draw() {
System.out.println("3");
}
public void draw2() {
System.out.println("4");
}
}
【问题讨论】:
-
一个示例 sn-p 的代码加上错误将使这对于那些试图学习这些概念的人来说是一个更好的问题。
-
我看到上面的例子取自 velocityreviews.com/forums/t151266-downcasting-problem.html 已经有一些很好的答案。
-
@PhiLho - Joel 的主要目的是在一个共同的保护伞下获得所有重要的问题和答案。问题/代码/答案是否已经发布在其他一些网站上并不重要。希望您明白这一点,否则请收听 Joel 的播客。
-
请编辑此代码,使代码 sn-ps 全部缩进四个空格。这将修复格式。
-
B b = (B) 新 A();是非法的,你不应该称之为沮丧。当我们谈论向上/向下转换时,实际的对象并没有改变,只是什么类型的变量引用了那个对象。不能使用子类型的变量引用基类型的对象。