首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassCastException

ClassCastException
EN

Stack Overflow用户
提问于 2010-06-22 19:55:49
回答 4查看 13K关注 0票数 5

我在java中有两个类:

代码语言:javascript
复制
class A {

 int a=10;

 public void sayhello() {
 System.out.println("class A");
 }
}

class B extends A {

 int a=20;

 public void sayhello() {
 System.out.println("class B");
 }

}

public class HelloWorld {
    public static void main(String[] args) throws IOException {

 B b = (B) new A();
     System.out.println(b.a);
    }
}

在编译时它不会给出错误,但在运行时它会显示一个错误: Exception in thread "main“java.lang.ClassCastException: A not be cast to B

EN

回答 4

Stack Overflow用户

发布于 2010-06-22 19:57:35

这是因为new A()的编译时表达式类型是A -这可能是对B实例的引用,因此允许强制转换。

然而,在执行时,引用只是对A的一个实例的引用-因此它无法进行强制转换。just A的实例不是B的实例。仅当引用确实引用B的实例或子类时,强制转换才有效。

票数 16
EN

Stack Overflow用户

发布于 2010-06-22 20:00:13

B扩展了A,因此B可以转换为A。然而,反之亦然。A的实例不能转换为B。

如果你来自Javascript世界,你可能希望它能工作,但是Java没有"duck typing“。

票数 7
EN

Stack Overflow用户

发布于 2015-02-18 08:58:44

首先这样做:

代码语言:javascript
复制
  A aClass = new B(); 

现在进行显式类型转换,它会起作用的:

代码语言:javascript
复制
   B b = (B) aClass;

mean的显式类型转换必须需要隐式类型转换。否则,不允许显式强制转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3092796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档