我有一个类似以下的界面
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
为什么呢?
最佳答案
简短答案:因为签名不能更改。扩展接口只会向该接口添加更多签名。
只能在类中进行覆盖,而不能在接口中进行覆盖。您无法更新签名,但是可以使用相同的签名对该方法进行不同的实现。
接口仅显示一个签名,该签名必须在实现它的类中可用。因此,您可以更改(重写)子类中的实现。方法签名(名称和参数)保持不变,因此仍然符合接口。接口中没有要重写的实现,因此,它仅显示在实现该接口的任何类中都存在这种方法,并且可以从实例化的对象中调用该方法。