代码如下:
lesson04b.java
class A
{
public void func1()
{
System.out.println("A.func1");
}
public void func2()
{
System.out.println("A.func2");
func1();
}
}
class B extends A
{
public void func1()
{
System.out.println("B.func1");
}
public void func3()
{
System.out.println("B.func3");
}
}
class C
{
public static void main(String[] args)     
{
    System.out.println("强制类型转换A->B后的调用效果:");
    A a = new A();
    B b = (B)a;
    b.func1();
}
}
编译javac lesson04b.java通过,
运行java C时出错:强制类型转换A->B后的调用效果:
Exception in thread "main" java.lang.ClassCastException: A
at C.main(test.java:31)请问,这段代码是否有误,应该怎样做才能使子类正常工作?

解决方案 »

  1.   

    B b=null;
    if(a instanceof B) b=(B)a;
      

  2.   

    to 一楼:
    你那样是没有用的,因为你的if语句块中的代码是没有被执行的。
      

  3.   

    to imA(阿梁):我记得Delphi好象可以将父类转换给子类,Java手册中有明确地说明吗?
      

  4.   

    to xinlnix(心海灵灯) :
    Java中有没有明确说我记不清了。但是你最笨的办法就是你写两个类A、B(里面什么都不用实现),B继承A,然后把A的一个实例转换成B的一个实例,你看看行不行,如果不行就不可以。
      

  5.   

    //测试父类强制转换为子类class A{}            //父类
    class B extends A {} //子类
    class C
    {
             //父类强制为子类,此处编译通过,但运行错误。
            public static void main(String[] args)
            {
                   A a = new A();
                   B b = (B)a; 
             }
    }
    错误仍是:
    Exception in thread "main" java.lang.ClassCastException: A
    at C.main(test.java:12)
    道理明白了:在Java中根本不可能将父类强制转换为子类类型。谢谢imA(阿梁)