class A {}
class B extends A {}A a = new A();
B b = new B();A a1 = b;//ok
B b1 = (B)a1; // ok,因为a1的类型实际上是B
B b2 = a; // ClassCastException,a的类型是A
所谓类型就是instanceof。

解决方案 »

  1.   

    down cast 编译通过的前提是, ClassA a = (ClassA) b,  b 必须被定义为ClassA 的祖先类,
    运行正常的条件是: 当执行到这条语句时b 必须真正是ClassA类的一个对象
      

  2.   

             物件
              |
          ------------ 
          |          |
         形状       窗体
          |          |
      ---------   -----------
      |       |   |         |
      圆    长方形 X 窗体   Linux窗体ok!圆是物件,也是形状,UP-CASTING 成为形状或物件都没问题,现在是一个标明为“物件的长方体”,这个物件实际就是长方体的,OK?把他当作
    换句话说,它就不是“窗体了”,OK!