Java android:ClassCastException在尝试投射片段时

Java android:ClassCastException在尝试投射片段时,java,android,oop,android-fragments,casting,Java,Android,Oop,Android Fragments,Casting,我正在开发一个应用程序,用户可以在其中创建和编辑自己的测验。我有两个片段,EditQuizFragment和AddQuizFragment,其中一个扩展了另一个: public class EditQuizFragment extends Fragment public class AddQuizFragment extends EditQuizFragment 我想将AddQuizFragment(子类)强制转换到EditQuizFragment上 当我尝试运行以下命令时,会得到一个Clas

我正在开发一个应用程序,用户可以在其中创建和编辑自己的测验。我有两个片段,
EditQuizFragment
AddQuizFragment
,其中一个扩展了另一个:

public class EditQuizFragment extends Fragment
public class AddQuizFragment extends EditQuizFragment
我想将
AddQuizFragment
(子类)强制转换到
EditQuizFragment

当我尝试运行以下命令时,会得到一个
ClassCastException

EditQuizFragment editQuizFragment = new EditQuizFragment();
AddQuizFragment addQuizFragment = (AddQuizFragment) editQuizFragment;
以下是错误消息:

Caused by: java.lang.ClassCastException: com.quizmaker.fragments.EditQuizFragment cannot be cast to com.quizmaker.fragments.AddQuizFragment
我尝试将导致错误的代码移动到其他类、文件等,但仍然得到相同的
ClassCastException
。这是什么原因?我想演员阵容会有用的

非常感谢您的任何帮助或建议


编辑:找到了解决方法。所以我试着投的原因是因为我用的是。在
AddQuizFragment.java
中,我试图做如下事情:

public static AddQuizFragment newInstance() {
    return (AddQuizFragment) EditQuizFragment.newInstance( /* arguments here */ );
}
这就是导致
ClassCastException
的原因

newInstance所做的一切就是为片段设置参数束,并使用片段将其从类中抽象出来。因此,我没有做上述工作,而是做了以下工作:

public static AddQuizFragment newInstance() {
    EditQuizFragment editQuizFragment = EditQuizFragment.newInstance(/* arguments here */);
    AddQuizFragment addQuizFragment = new AddQuizFragment();
    addQuizFragment.setArguments(editQuizFragment.getArguments());
    return addQuizFragment;
}

AddQuizFragment
是一个
EditQuizFragment
,但
EditQuizFragment
不是一个
AddQuizFragment


除非
editQuizFragment
是一个实现
AddQuizFragment

AddQuizFragment
是一个
editQuizFragment
,但
editQuizFragment
不是一个
AddQuizFragment
的对象,否则您就不能这样做


除非
editQuizFragment
是一个实现
AddQuizFragment

的对象,从同样的意义上说,所有的正方形都是矩形,但不是所有的矩形都是正方形,所有的
AddQuizFragment
都是
editQuizFragment
,但不是相反。您有
new EditQuizFragment()
,它不会创建
AddQuizFragment
@TavianBarnes请参阅我对Kiskae回答的答复,从同样的意义上讲,所有的正方形都是矩形,但并非所有的矩形都是正方形,所有
AddQuizFragment
都是
EditQuizFragments
,但并非相反。您有
new EditQuizFragment()
,它不会创建
AddQuizFragment
@TavianBarnes请参阅我对Kiskae答案的答复