或者特别是:两者之间的区别是什么
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();
}
它会以任何方式影响实现类吗?
添加或省略@over
不会改变fa
方法的重写行为。它是基于名称和参数类型(在本例中没有)的重写,而不是其他。返回类型需要兼容(协变返回),但不是“这是不是重写”决策的一部分。
注释(主要)用于验证方法是否重写了来自超级类型的方法。如果省略它,可能会有来自IDE或其他工具(如SonarQube)的警告,但编译器并不关心。如果添加不正确,它的真正目的就会出现——你会得到编译器错误。
@Override注释只是提醒编译器在定义错误时向您显示错误。这不会影响任何事情。最好的做法是经常写。
不,不应该。实现接口B
的类仍然必须提供void fa()的实现
不管接口B是否用
@Override
注释相同的方法签名。此外,在这种情况下,将@Override
注释放在接口B中没有多大意义,因为注释基本上意味着您正在重写超类赋予该方法签名的实现。由于接口A
或接口B
提供了void fa()的实现
,因此没有意义。
如果
接口A
为void 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