首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java接口中的方法应该使用还是不使用public访问修饰符来声明?

Java接口中的方法应该使用还是不使用public访问修饰符来声明?
EN

Stack Overflow用户
提问于 2008-10-02 10:13:22
回答 9查看 118.4K关注 0票数 315

Java接口中的方法应该使用还是不使用public访问修饰符来声明?

当然,从技术上讲,这并不重要。实现interface的类方法始终为public。但是什么是更好的约定呢?

Java本身在这一点上并不一致。例如,请参阅CollectionComparableFutureScriptEngine

EN

回答 9

Stack Overflow用户

发布于 2008-10-02 10:20:55

在Java接口中,public修饰符应该被省略(在我看来)。

因为它没有添加任何额外的信息,所以它只是将注意力从重要的东西上移开。

大多数风格指南会建议你省略它,但当然,最重要的事情是在你的代码库中保持一致,特别是对于每个界面。下面的例子很容易让那些Java不是100%流利的人感到困惑:

代码语言:javascript
复制
public interface Foo{
  public void MakeFoo();
  void PerformBar();
}
票数 46
EN

Stack Overflow用户

发布于 2016-03-07 04:52:16

尽管这个问题很久以前就被提出了,但我觉得一个全面的描述会澄清为什么没有必要在接口的方法之前使用公共抽象,在常量之前使用公共静态最终。

首先,接口用于为一组不相关的类指定公共方法,对于这些类,每个类都有一个唯一的实现。因此,不可能将访问修饰符指定为private,因为它不能被其他要覆盖的类访问。

其次,虽然可以初始化接口类型的对象,但接口是由实现它的类实现的,而不是继承的。由于接口可能由不同的无关类实现(实现),这些类不在同一个包中,因此受保护的访问修饰符也是无效的。因此,对于访问修饰符,我们只剩下公共选择。

第三,接口没有任何数据实现,包括实例变量和方法。如果有在接口中插入已实现的方法或实例变量的逻辑原因,那么它必须是继承层次结构中的超类,而不是接口。考虑到这一事实,由于没有方法可以在接口中实现,因此接口中的所有方法都必须是抽象的。

第四,Interface只能包含constant作为它的数据成员,这意味着它们必须是final,当然final常量被声明为静态,以仅保留它们的一个实例。因此,对于接口常量来说,静态final也是必须的。

因此,总而言之,尽管在方法之前使用公共抽象,在接口的常量之前使用公共静态final是有效的,但由于没有其他选择,因此它被认为是多余的,不能使用。

票数 11
EN

Stack Overflow用户

发布于 2017-07-02 16:31:07

随着Java8/9中接口方法的privatestaticdefault修饰符的引入,事情变得更加复杂,我倾向于认为完整的声明更具可读性(需要Java9来编译):

代码语言:javascript
复制
public interface MyInterface {

    //minimal
    int CONST00 = 0;
    void method00();
    static void method01() {}
    default void method02() {}
    private static void method03() {}
    private void method04() {}

    //full
    public static final int CONST10 = 0;
    public abstract void method10();
    public static void method11() {}
    public default void method12() {}
    private static void method13() {}
    private void method14() {}

}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/161633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档