Java接口中的抽象方法

时间:2011-03-18 10:36:29

标签: java inheritance

我见过很多东西,但从未想过要提出质疑......在Java 界面中,有什么区别:

public void myMethod();

public abstract void myMethod();

我理解Java类中abstract关键字的用途,但它在接口中的用途(如果有的话)是什么目的?

6 个答案:

答案 0 :(得分:12)

两个声明都完全相同,所有接口方法都没有实现(是抽象的),因此abstract关键字是多余的。在我看来,在这种情况下编写abstract会增加代码的冗长程度。

答案 1 :(得分:8)

接口中的所有方法声明都是publicabstract。根本没有指定它。

此处只需要void myMethod();

答案 2 :(得分:6)

来自Java Specification:

  
      
  • 9.4抽象方法声明   ..   ..   ..
  •   
     

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

     

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

答案 3 :(得分:2)

此处publicabstract都是多余的。我个人更喜欢省略它们,因为在我看来,在这种情况下它们都只是吵闹。

虽然你当然可以包含它们,但我认为完全有理由认为阅读代码的人都知道界面中的所有方法都必须是公开的和抽象的 - 这是一个很好理解的功能。

答案 4 :(得分:1)

正如已经说过的接口方法是publicabstract。现在discouraged将它们指定为公共摘要:

  

为了与旧版本的Java平台兼容,允许但不鼓励,但作为一种风格,不要为接口中声明的方法冗余地指定抽象修饰符。

     

允许,但强烈建议不要在样式方面为冗余指定接口方法的公共修饰符。

完整性interface fieldspublic staticfinal ......

答案 5 :(得分:0)

虽然您可以显式声明,但接口中的所有方法都是隐式公共和抽象的。只有当你试图使它们非抽象(通过提供正文)和私有时,编译器才会抱怨。