覆盖派生类中已覆盖的方法

问题描述:

我有一个延伸FragmentStatePagerAdapter的类CarSettingsAdapter。 那堂课我有返回类型CarSettings覆盖派生类中已覆盖的方法

@Override 
    public CarSettings getItem(int position) { 
     return carSettingsList.get(position); 
    } 

现在我创建一个扩展CarSettingsAdapter类一个新的类,但我希望它回到我自己的类型的项目一个重写的方法 - 让说MyTypeB

public class NewCarSettings extends CarSettings { 

@Override 
    public MyTypeB getItem(int position) { 
     return typeBList.get(position); 
    } 
} 

我不能重写它,我得到一个编译错误 - The return type is incompatible with CarSettingsAdapter.getItem(int)

我想使用CarSettingsAdapter的所有逻辑,这就是为什么我扩展它,但也覆盖基本的方法。我该怎么做?

+0

如果更改方法签名,通过定义你是不是重写它,你正在创建一个新的方法。 – azurefrog 2015-02-05 19:23:20

+0

NewTypeB的类型层次结构是什么?如果它是CarSettings的子类型,这将仅适用。 – 2015-02-05 19:23:56

+0

@AndyTurner不是'NewTypeB'不是'CarSettings'的子类型。那么如何扩展“CarSettingsAdapter”类并添加一些更改...我不想将95%的代码复制到我的新类中 – 2015-02-05 19:29:02

您可以创建一个使用泛型的中间类。例如CustomSettingsAdapter<T> extends FragmentStatePagerAdapter

那样你的getItem()方法可能会返回T

然后你把常见的逻辑该类并创建新类这样的:

  • CarSettingsAdapter extends CustomSettingsAdapter<CarSettings>
  • NewCarSettingsAdapter extends CustomSettingsAdapter<NewCarSettings>