public class TestInitOrder {
public static void main(String[] args) {
Object c=new Object();
c=new B();
A a=(A)c;
a.doit();
}
}
class A{
public void doit(){}
}
class B extends A{
public void doit(){System.out.println("B");}
}
和
public class TestInitOrder {
public static void main(String[] args) {
A a=new B();
a.doit();
}
}
class A{
public void doit(){}
}
class B extends A{
public void doit(){System.out.println("B");}
}
都可以输出“B”
所以 类型先向上转换成超级类然后再转换为父类 和直接转换为父类 没有什么区别。在反射中一般动态加载的类 类型都是超级类 所以向下转换成 原来类的父类 进行操作