在Java中,何时应该在接口中使用抽象方法?

时间:2009-09-29 12:54:23

标签: java interface coding-style abstract-methods

我在Java中有以下界面

public interface IFoo
{
    public abstract void foo();
    public void bar();
}

foo()和bar()有什么区别? 我什么时候应该使用摘要?

除非我遗漏了一些微妙的东西,否则两者似乎都能实现我想要的目标?

更新 Why would one declare a Java interface method as abstract?

重复

10 个答案:

答案 0 :(得分:18)

没有任何功能差异。在java接口中没有提供任何实现,因此所有方法声明都是隐式抽象的。

见[1]:http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html

以上直接引用:

  

注意:接口中的所有方法(参见“接口”部分)都是隐式抽象的,因此抽象修饰符不与接口方法一起使用(它可能是 - 它只是没有必要)。

答案 1 :(得分:17)

默认情况下,接口方法同时为publicabstractfoo()bar()之间没有区别,您可以安全地删除所有publicabstract个关键字。

答案 2 :(得分:5)

你没有遗漏任何东西。来自Java Language Specification

  

正文中的每个方法声明   接口是隐含的   摘要,所以它的身体永远   用分号代表,而不是分号   块。

     

正文中的每个方法声明   接口是隐式公开的。

换句话说,您可以省略接口方法上的publicabstract

答案 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”关键字添加到接口中的方法声明中与该方法无关!