Java 重写派生类中已重写的方法
我有一个类Java 重写派生类中已重写的方法,java,android,Java,Android,我有一个类CarSettingsAdapter,它扩展了FragmentStatePagerAdapter。 在该类中,我有一个重写的方法,该方法返回CarSettings类型的项 @Override public CarSettings getItem(int position) { return carSettingsList.get(position); } 现在,我创建了一个扩展classCarSettingsAdapter的新类,但我希望它返回我自己的
CarSettingsAdapter
,它扩展了FragmentStatePagerAdapter
。
在该类中,我有一个重写的方法,该方法返回CarSettings类型的项
@Override
public CarSettings getItem(int position) {
return carSettingsList.get(position);
}
现在,我创建了一个扩展classCarSettingsAdapter
的新类,但我希望它返回我自己的类型,比如说MyTypeB
public class NewCarSettings extends CarSettings {
@Override
public MyTypeB getItem(int position) {
return typeBList.get(position);
}
}
我无法覆盖它,我收到一个编译错误-返回类型与CarSettingsAdapter.getItem(int)
不兼容
我想使用
CarSettingsAdapter
的所有逻辑,这就是我扩展它的原因,但也要覆盖基本方法。我该怎么做呢?您可以创建一个使用泛型的中间类。例如,CustomSettingsAdapter扩展了FragmentStatePagerAdapter
这样,您的getItem()
方法可以返回T
然后将公共逻辑放入该类中,并创建如下新类:
CarSettingsAdapter扩展了CustomSettingsAdapter
NewCarSettingsAdapter扩展了CustomSettingsAdapter
NewTypeB
不是CarSettings
的子类型。那么,我如何扩展类CarSettingsAdapter
并添加一些更改。。。我不想把95%的代码复制到我的新class@AlexOpent好吧,没有什么可以阻止您添加一个方法,该方法将返回一个MyTypeB
,但是它不能被调用getItem
,或者它必须具有不同的参数。但是,如果要覆盖该方法,则必须返回CarSettings
或其子类型之一。此限制的原因是,您可以将NewCarSettings
的实例传递给任何需要CarSettings
实例的方法,如果调用getItem
,则该方法需要返回CarSettings
的实例。如果您能够返回任何其他类型,您将得到一个ClassCastException
。您不能使用另一个方法getMyNewItem()
来返回新值吗?您不能在his中使用多态性,但您仍然继承了CarSettingsAdapter
(或者)您可以将MyTypeB
作为CarSettings
的子类(或者)如果您有权访问FragmentStatePagerAdapter
,您可以将getItem()的
返回类型更改为对象。最后一个只是一个解决方案,不是一个好的设计解决方案,尽管您必须进行一些实例检查,以了解从该方法获得的对象