Java中接口中的抽象方法是什么?

27

可能是重复问题:
为什么会有人将Java接口方法声明为抽象的?

我在我们的ejb接口中发现了以下代码。请问有人知道接口中的抽象方法是用来做什么的吗?如果你知道,请解释一下为什么需要这样做,或者提供一个相关的阅读链接 =)

@Local
public interface IDomasOrderProcessor {

    public abstract void executeOrderLines(List<OrderLine> lines);
    public abstract void setupJob(List<OrderLine> lines);
    public abstract void setupJob(OrderLine line);
}
4个回答

50
在这种情况下,abstract是多余的。在一个interface中定义的所有方法都根据定义方式是publicabstract的。
摘自Java语言规范第9.4节
每个接口中的方法声明在其主体中都是隐式抽象的,因此其主体始终由分号而不是代码块表示。
接口主体中的每个方法声明都是隐式公共的。

3
在这种情况下,“public”也是这样。也就是说,您可以两者都省略,它仍然会起到同样的作用。 可能代码最初是一个抽象类,被重新设计了。 - Calum
1
确实,public也是如此。我将其添加到答案中,因为我的第一个回答有些简短。 - Dev
自Java 8以来,接口可以具有带有实现的方法。这些被称为默认方法。默认方法可以添加到接口中而不影响已经实现该接口的类。 - Stephan van Hoof

17

在接口中,publicabstract修饰符都是隐含的,应该避免使用。


6

接口中的方法在定义时默认为public和abstract。我听说一些人觉得明确声明这些关键字可以更清晰,但对我来说,这似乎是多余的噪音。


这确实是噪音。(实际上,在我意识到“public”是多余的之前,我已经用Java编程多年了。) - Tom Hawtin - tackline

3
根据此文档,接口的所有方法均为publicabstract,因此没有必要在接口中显式定义abstract方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接