public class test{
public static void main(String [] args){
c1 _c1 = new c1();
c2 _c2 = (c2)_c1;
_c2.p1();
_c2.p2();
}
}
class c1{
public void p1(){System.out.println("haha");}
}
class c2 extends c1{
public void p2(){System.out.println("hehe");}
}报Exception in thread "main" java.lang.ClassCastException: c1
at test.main(test.java:4)
public static void main(String [] args){
c1 _c1 = new c1();
c2 _c2 = (c2)_c1;
_c2.p1();
_c2.p2();
}
}
class c1{
public void p1(){System.out.println("haha");}
}
class c2 extends c1{
public void p2(){System.out.println("hehe");}
}报Exception in thread "main" java.lang.ClassCastException: c1
at test.main(test.java:4)
解决方案 »
- 关于mysql和sqlserver中函数的问题
- 求一使用addAncestorListener()的代码,本人不太了解API的描述,忘高手指点一二。
- 强密码的生成算法.
- JButton 和 它的ICON 问题。。。
- 关于Assert的编译问题(在线等)
- 怎么使JTable双击弹出对话框,读取该行的每个单元格的数据到该对话框中进行修改,然后存入数据库
- 关于类的习题
- 在JBuilder X中使用Array的问题
- ========= JDialog问题 =========
- 高分赠英雄:如何改变JScrollPane的滚动条宽度?
- 请问怎样获取一个canvas上某一点的颜色?
- classpath=D:\java;.;D:\tomcat\common\lib\servlet-api.jar 寻找classpath路径是不是从前到后找的啊?
c2 _c2 = (c2)_c1;
_c2.p1();
_c2.p2();
你这个明显不对嘛,子类对象的引用可以向上转型为父类的引用;但是在父类引用向下转为子类引用的转型,必须满足引用指向的对象本身就是一个子类对象才行!
而在你这个程序中,对象本身是一个父类对象,所以向下转型会失败,因为它根本就不是一个子类c2的对象;更别说调用c2中的方法p2了
所以你的第三行应该改为:c1 _c1=new c2();
这样第四行才是正确的!
另外类对象不要写成_c1,_c2的形式!这样写不符合规范的!
我相信你应该满意了吧,满意的话就给分!
c1 obj_c1=new c2();
c2 obj_c2=(c1)obj_c1;
这样就可以了。