public class MyListFragment extends ListFragment {...}
ListFragment listFragment = new MyListFragment();
ListFragment listFragment = (ListFragment) new MyListFragment();
两行都没有使用“无法从MyListFragment强制转换为ListFragment”进行编译。
答案 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检查值。