new A() 返回一个A的对象,该对象并非B的对象,所以(B)(new A())发生ClassCastException。
解决方法:
A a = new B();
B b = (B)a;
b.f();

解决方案 »

  1.   

    B b = (B)(new A());
    如果这样执行的话,b当中怎么会有f1()这个方法呢,所以b也就产生错误了我认为,上溯造型 可以用来方便的传递对象
    比如:a1,a2,a3都继承了A,那么当你想统一对a1,a2,a3进行对象传送的时候(比如作为方法的参数),就可以上溯造型为A。那么下塑造型就可以在具体的函数内部,把你刚刚上溯造型后的对象恢复回来,再依次按照不同的对象进行处理。
      

  2.   

    其实下溯造型一般不会单独使用。总是和上溯造型联系使用
    单单使用下溯造型是不对的。父类怎么可能知道子类的实现方法呢?B b= (B)(new A());本身就是违反设计模式的。
      

  3.   

    肯定是错的拉。
    B b = (B)(new A());
    A怎么可能是B的一个实例呢?