当前位置: 首页 > 知识库问答 >
问题:

扩展另一个接口的接口是否应该指定覆盖?

微生令雪
2023-03-14

或者特别是:两者之间的区别是什么

java prettyprint-override">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();
}

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

共有3个答案

邵伟
2023-03-14

添加或省略@over不会改变fa方法的重写行为。它是基于名称和参数类型(在本例中没有)的重写,而不是其他。返回类型需要兼容(协变返回),但不是“这是不是重写”决策的一部分。

注释(主要)用于验证方法是否重写了来自超级类型的方法。如果省略它,可能会有来自IDE或其他工具(如SonarQube)的警告,但编译器并不关心。如果添加不正确,它的真正目的就会出现——你会得到编译器错误。

诸葛康胜
2023-03-14

@Override注释只是提醒编译器在定义错误时向您显示错误。这不会影响任何事情。最好的做法是经常写。

冉锋
2023-03-14

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

如果接口Avoid fa()提供了一个默认实现,那么这是有意义的,例如:

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

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

 类似资料:
  • 如何在Java中检查接口是否扩展了另一个接口?我试过这个: 检查超类是否不工作(接口不是类)谢谢

  • 问题内容: 在Java中,当接口扩展另一个接口时: 为什么要实现其方法? 当接口不能包含方法主体时,如何实现其方法 当扩展另一个接口而不实现它时,如何实现这些方法? 接口实现另一个接口的目的是什么? 这是Java的主要概念! 编辑: 在eclipse中,除了中的实现方法之外,还有实现符号。 当我将鼠标悬停在它上面时,它表示它实现了该方法!!! 问题答案: 为什么要实现其方法?当接口不能包含方法主体

  • 问题内容: 我需要确定表示接口的Class对象是否扩展了另一个接口,即: 根据规范 Class.getSuperClass()将为接口返回null。 如果该Class表示Object类,接口,原始类型或void,则返回null。 因此,以下操作将无效。 有任何想法吗? 问题答案: 使用Class.getInterfaces,例如: 另外,以下代码可能会有所帮助,它将为您提供一个包含所有超类和某个类

  • 为什么它这样做,它有一个更好的做法?在sub接口中实现方法有什么区别吗?

  • 有人知道如何扩展dropwizard界面吗?现在它只有所需的选项,但我需要为anooted方法添加权限。 例如: 我有一个用户管理员和一个普通用户。两者都可以进行身份验证并到达我的@auth带注释的资源。但我想允许一些(不是全部)http方法请求只为管理员和普通用户删除。如何在资源之外执行此操作?类似的东西

  • 主要内容:org.springframework.context.ApplicationContextInitializer,org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor,org.springframework.beans.factory.config.BeanFactoryPostProcessor,,,,,,,,,,,,1.可扩展的接口启动调用顺序图 ApplicationConte