我有如下界面
public interface IDrawerItem<T, VH extends RecyclerView.ViewHolder> extends IItem<T, VH>, IExpandable<T, IDrawerItem>, ISubItem<IDrawerItem, IDrawerItem> {
void bindView(VH holder, List payloads);
}
我收到以下错误
错误:(44,10)错误:名称冲突:IDrawerItem中的bindView(VH#1,List) 然而,IItem中的bindView(VH#2,List)具有相同的擦除功能 在VH#1,VH#2是类型变量的情况下,它们都不会覆盖另一个:VH#1 扩展在接口IDrawerItem VH#2中声明的ViewHolder扩展 在接口IItem中声明的ViewHolder
为什么会这样?
答案 0 :(得分:3)
简答:因为签名无法更改。扩展接口只会为界面添加更多签名。
覆盖只能在类中完成,而不能在接口中完成。您无法更新签名,但可以使用相同的签名对该方法进行不同的实现。
接口只显示一个必须在实现它的类中可用的签名。因此,您可以更改(覆盖)子类中的实现。方法签名(名称和参数)保持不变,因此它仍然符合接口。在接口中没有要覆盖的实现,因此它只显示在实现此接口的任何类中都有这样的方法,并且它可以从实例化对象中调用。