public class qwerwqr {
public static void main(String[] args) {
D d = new D();
E e1 = new E();
d=  (D)(B)e1;                //这行里 E类型 e1可以转换成 父类型 
                                               // B啊。怎么还能再由B父类型转成D类型了呢
System.out.println("1234");
}
}
interface A{}
class B implements A{}
class C extends B{}
class D extends C{}
class E extends D{}

解决方案 »

  1.   

    看其继承关系:
    A-->B-->C-->D-->E
    因为e1是类E的对象。因为类D,C,B,A都是类E的直接或间接父类(接口)。所以可以转成任意A,B,C,D类对象。
      

  2.   

    比如这样是合法的
    B b = new B();  此时引用b只想一个B对象
    A a = b;        此时将b向上装换为一个A引用,而实际上依然是指向一个B对象
    B b1 = (B)a;   由于a指向一个B对象,所以,还是可以将a强制向下转换为一个B类型的引用的
    而比如下面这样,则不是合法的,,,,,,,,,,,,,,,,
    A a = new A();  此时引用a指向一个A对象
    B b = (B)a,    将a强制向下转换为一个B类型,但是a实际上是指向一个B类型的父类的实例,所以不能实现这种转化,但是,编译器不会提示错误,运行期间才会提示错误
    ,,,,,,,,,,,,,,,,,,
    LZ,可以给分了
      

  3.   

    这是继承问题,
    子类一定属于父类,就好比苹果一定属于水果, 由子类向父类转换,不需要强制类型转换,
    父类不一定只有一个子类,就好比水果包括 苹果,梨,橘子..., 所以由父类向子类需要强制类型转换。
    你的代码是:
    B b = new B(); 此时引用b只想一个B对象
    A a = b; 此时将b向上装换为一个A引用,而实际上依然是指向一个B对象
    B b1 = (B)a; 由于a指向一个B对象,所以,还是可以将a强制向下转换为一个B类型的引用的