package me.luger.base;public class OverrideTest1 {
public static void main(String[] args) {
Sub2 sub = new Sub2();
Sup sup = new Sup();
sub = (Sub2) sup;
sub.method();
}
}class Sup{
public void method(){
System.out.println("father");
}
}class Sub2 extends Sup{
@Override
public void method() {
System.out.println("children");
}
}
我写的向下转型的例子 运行的时候报错,这么向下转型不行的吗?

解决方案 »


  1. Sup sub = new Sub2(); //向下转型(美女指向长发美女)
    Sub2 sub2 = (Sub2)sub; //向下转型 运行正常//简单来说 长发的美女 转换为 长发的美女 正常的Sup sub3 = new Sup();
    Sub2 sub4 = (Sub2)sub3; //不安全的向下转型,编译无错,运行时异常//而 这个就是 美女 转换 为长发美女 很明显错的//楼主可以意会下,本人功底不深厚,还请高手补充
      

  2. 呵呵,这个问题在下当初也想半天:明明Sub2实例占空间要大,但却放不下占空间要小的Sup实例……
    这里如果用以前内存容量的思维去思考肯定会晕。
      

  3. 运行这条报错  sub = (Sub2) sup;Exception in thread "main" java.lang.ClassCastException: test_1.Sup cannot be cast to test_1.Sub2sub = (Sub2) sup;     sub是父类,Sub2是子类。现在把父类转换成子类,你父亲剩下你,你又生下父亲?这说不清楚呀,违反自然定律!所以这句报错。
      

类似问题 »