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{}
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{}
A-->B-->C-->D-->E
因为e1是类E的对象。因为类D,C,B,A都是类E的直接或间接父类(接口)。所以可以转成任意A,B,C,D类对象。
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,可以给分了
子类一定属于父类,就好比苹果一定属于水果, 由子类向父类转换,不需要强制类型转换,
父类不一定只有一个子类,就好比水果包括 苹果,梨,橘子..., 所以由父类向子类需要强制类型转换。
你的代码是:
B b = new B(); 此时引用b只想一个B对象
A a = b; 此时将b向上装换为一个A引用,而实际上依然是指向一个B对象
B b1 = (B)a; 由于a指向一个B对象,所以,还是可以将a强制向下转换为一个B类型的引用的