我在Java中有以下界面
public interface IFoo
{
public abstract void foo();
public void bar();
}
foo()和bar()有什么区别? 我什么时候应该使用摘要?
除非我遗漏了一些微妙的东西,否则两者似乎都能实现我想要的目标?
更新 Why would one declare a Java interface method as abstract?
重复答案 0 :(得分:18)
没有任何功能差异。在java接口中没有提供任何实现,因此所有方法声明都是隐式抽象的。
见[1]:http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html
以上直接引用:
注意:接口中的所有方法(参见“接口”部分)都是隐式抽象的,因此抽象修饰符不与接口方法一起使用(它可能是 - 它只是没有必要)。
答案 1 :(得分:17)
默认情况下,接口方法同时为public
和abstract
。 foo()
和bar()
之间没有区别,您可以安全地删除所有public
和abstract
个关键字。
答案 2 :(得分:5)
你没有遗漏任何东西。来自Java Language Specification:
正文中的每个方法声明 接口是隐含的 摘要,所以它的身体永远 用分号代表,而不是分号 块。
正文中的每个方法声明 接口是隐式公开的。
换句话说,您可以省略接口方法上的public
和abstract
。
答案 3 :(得分:4)
它是多余的(两个声明之间没有区别),并且在Java语言规范的section 9.4中明确表示不鼓励:
与旧版本兼容 Java平台是允许的 但作为一种风格,沮丧 冗余地指定摘要 声明的方法的修饰符 接口
而且public
同样没有必要且不鼓励:
允许,但强烈劝阻作为一种风格,冗余地指定 接口方法的公共修饰符。
我不知道为什么public
强烈不鼓励,但abstract
只是气馁......
答案 4 :(得分:3)
两者都是一样的,因为界面中的所有方法都是抽象的。
答案 5 :(得分:2)
abstract
是不必要的(将接口中的方法标记为public
)。
你而不是在抽象类中的方法上使用它,以便强制它被子类覆盖。
答案 6 :(得分:2)
声明之间没有区别。从概念上讲,接口中的所有方法都是抽象的。
答案 7 :(得分:2)
没有区别。 java接口中的所有方法都是抽象的。
请参阅此链接的第一个注释: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html
答案 8 :(得分:0)
foo()和bar()都是抽象的,因为它们是在接口中声明的。你在这里使用的抽象词没有意义 - 你最好删除它。
答案 9 :(得分:0)
java中的接口与完全抽象的类“某种程度上”相同,因此将“abstract”关键字添加到接口中的方法声明中与该方法无关!