0

我有一个如下界面

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 中声明的 ViewHolder VH#2 扩展在接口 IItem 中声明的 ViewHolder

为什么呢?

4

1 回答 1

2

简短的回答:因为签名不能更改。扩展接口只是为接口添加更多签名。

覆盖只能在类中完成,而不是接口。您不能更新签名,但可以使用相同的签名对该方法进行不同的实现。

接口只显示一个签名,该签名必须在实现它的类中可用。因此,您可以更改(覆盖)子类中的实现。方法签名(名称和参数)保持不变,因此它仍然符合接口。接口中没有要覆盖的实现,因此它只表明在实现该接口的任何类中都有这样的方法,并且可以从实例化的对象中调用它。

于 2016-11-11T12:57:45.230 回答