扩展另一个接口的接口是否应该指定重写



特别是:之间有什么区别

interface A {
void fa();
}

interface B extends A {
void fa();
void fb();
}

interface A {
void fa();
}

interface B extends A {
@Override
void fa();
void fb();
}

它会以任何方式影响实现类吗?

不应该。实现interface B的类仍然必须提供void fa();的实现,而不管接口B是否用@Override注释相同的方法签名。此外,在这种情况下,将@Override注释放在接口B中没有多大意义,因为注释基本上意味着您正在重写超类赋予该方法签名的实现。由于Interface AInterface B都没有为void fa()提供实现,所以这是没有意义的。

如果interface Avoid fa()提供了默认实现,这将是有意义的。例如:

interface A {
public default void fa(){
System.out.println("My default implementation");
}
}

在这种情况下,接口B将通过使其再次抽象来覆盖从接口A提供给fa()的实现。当接口A将fa()定义为抽象,而接口B通过将其转换为default方法来为其提供实现时,情况也是如此。

@Override注释只是一个提醒,提醒编译器在定义错误时显示错误。它不会影响任何事情。好的做法是一直写下去。

添加或省略@Override不会改变fa方法的重写行为。它是一个基于名称和参数类型的覆盖(在本例中为none(,而不是其他类型。返回类型需要是兼容的(协变返回(,但不是"返回"的一部分;这是否为超控;决定

@Override注释(主要(用于验证一个方法是否覆盖了超类型中的方法。如果忽略它,IDE或SonarQube等其他工具可能会发出警告,但编译器并不关心。如果你添加错误,那就是它的真正用途——你会得到一个编译器错误。

相关内容

  • 没有找到相关文章

最新更新