class yangxi
{
void abcdef()
{
System.out.println("yangxi");
}}
class yangxi2 extends yangxi
{
int abc=123;
}
public class yangxi1 
{
public static void main(String[] args)
{

    yangxi2 aaa=new yangxi2();
    yangxi bbb=new yangxi();
    aaa.abcdef();
    ((yangxi2)bbb).abc=456;     System.out.println(((yangxi2)bbb).abc);
}
}编译没有问题,可运行的时候用子类的对象调用父类的方法成功。可为什么用强制类型转换的父类对象调用子类的变量就不行呢?
将yangxi bbb=new yangxi();改为yangxi bbb=new yangxi2();后就能得到结果了!这又是为什么?
希望高手给解决一下。谢谢!运行结果:
yangxi
Exception in thread "main" java.lang.ClassCastException
        at yangxi1.main(yangxi1.java:21)
Press any key to continue...

解决方案 »

  1.   

    由父Cast到子,就会出问题。
    父拥有的不一定子就拥有,所以会出问题。
      

  2.   

    yangxi   bbb=new   yangxi();  创建父类对象的引用,为其分配yangxi类的内存空间,且其中没有变量abc所占的空间,因为父类yangxi中没有
    而在子类里有了,即使把他强制转换为父类,他的内存空间里还是没有
      

  3.   

    第一种情况:
    yangxi bbb=new yangxi();
    ((yangxi2)bbb).abc=456;
    注意new的是yangxi这个类,也就是说分配了的是yangxi这个类的内存空间。但是yangxi2这个类的内存空间却没有被分配。abc是yangxi2的成员变量。没有分配内存空间,当然是获取不出来的。类型转换只不过是把bbb转换成为yangxi2这个类型,但是里面的内容却是没有增加的。
    另一种情况:
    yangxi bbb=new yangxi2();
    new的是yangxi2,分配的是yangxi2的内存空间,abc还正好是yangxi2的成员变量。当然不报错。