1.一种是 同级类型转换,编译时期看声明类,运行时期看实际创建类
Class A{} Class B extends A{} Class C extends A{} 详情请看https://www.cnblogs.com/xuwangqi/p/11102156.html中的Error2类
2.一种是多级继承类型转换,运行时期看是否有继承关系
Class A{} Class B extends A{} Class C extends B{}
接下来就是详解
public class Compare { public static void main(String[] args) { //向上造型 A a =new C(); //编译的时候b的声明类是B a的声明类是A有继承关系所以编译可以通过 //运行时期 b的实际创建类是B,a的实际创建类是C,运行时相等或者有继承关系要转换的是转换后的子类 例如 C是B的子类,运行也是对的 B b=(B)a; //正确 向下造型需要向上造型的支持 System.out.println("1"); D d=(D)a; //强转出错 System.out.println("2"); } } class A{ } class B extends A{ } class C extends B{ } class D extends C{ }