ClassCastException的 问题

alie88 2007-07-14 11:19:36
ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常 这句话怎么理解啊

不是实例 的子类时 or 不是 实例的子类时
...全文
185 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rtif666 2007-07-16
  • 打赏
  • 举报
回复
谢了,明白了

其实还有一条就是:子类的对象一定是父类的对象 ,父类的对象不一定是他子类的对象
liujun999999 2007-07-15
  • 打赏
  • 举报
回复
B b2 =(B)new A()
你这个是把一个父类对象转换成一个子类对象啊,肯定会有问题
你想想,如果汽车是父类,轿车是子类,那这句话的意思就是把普通的汽车变成一个轿车,行得通吗?
xieboshi 2007-07-15
  • 打赏
  • 举报
回复
B b1 = (B) a之所以能转换,是因为这时的a是B类的对象,而不是A类的对象,只是A类的引用来引用了他。
其实不管他怎样向上向下转型,我们实际的对象类型始终是最初实例化(new)的那个,我们实际的对象始终只能向上转型。
这样我们就可以看一下B b2 =(B)new A();这条语句,他实际的对象是new 的那个即A类型,这时如果把它转为B类型就是向下转型了,违背了我们上面的原则,所以是错误的。也就是我们看事物不要看他的表面(引用类型),而要看他的实质(实际对象类型)。
rtif666 2007-07-14
  • 打赏
  • 举报
回复
我也出现类似问题 求教!!!

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

}

}

class B extends A {
public void print() {
System.out.println ("B") ;
}

}


public class Test_P {

public static void main(String args[]){
A a = new B() ;
a.print();


B b1 = (B) a ;//cast
b1.print() ;

B b2 =(B)new A() ;
b2.print() ;

}

}

我有一点不明白的是 : 既然 B b1 = (B) a ;//子类的对象可以指向父类的对象
为何我写成 B b2 =(B)new A() ;这样就说有转换错误

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧