“无法强制转换”子类到超类

时间:2013-12-19 07:27:00

标签: java android inheritance casting

public class MyListFragment extends ListFragment {...}

ListFragment listFragment = new MyListFragment();
ListFragment listFragment = (ListFragment) new MyListFragment();

两行都没有使用“无法从MyListFragment强制转换为ListFragment”进行编译。

2 个答案:

答案 0 :(得分:4)

您要做的事情肯定是有效的,因此您所描述的代码之外必定存在导致问题的内容。以下代码编译。

class A {

}

class B extends A {

}

private void test() {
    B b = new B();
    A a = b;
    A a2 = (A)b;
    A a3 = new B();
    A a4 = (A)new B();
}

您很可能导入错误,两个具有相同名称的类,并且您从错误的包中导入了一个。

答案 1 :(得分:1)

两者都有效

ListFragment listFragment = (ListFragment) new MyListFragment();


ListFragment listFragment =new MyListFragment();

就OOPS而言,请查看此示例。

  class SuperClass {}  
  class SubClass extends SuperClass {  
    public static void main(String[] x) {  
      SubClass sub = (SubClass) new SuperClass();      //1. ClassCastException   

       SuperClass sup = (SuperClass) new SubClass();    
       SubClass sub1 = (SubClass) sup;                //2. ok, why?  
   }  
 }  

因为编译器只检查类型和JVM检查值。