Java接口中的方法应该使用或不使用公共访问修饰符来声明?
当然,从技术上讲,这并不重要。实现接口的类方法总是公共的。但是什么是更好的约定呢?
Java本身在这方面并不一致。参见Collection vs. Comparable或Future vs. ScriptEngine。
Java接口中的方法应该使用或不使用公共访问修饰符来声明?
当然,从技术上讲,这并不重要。实现接口的类方法总是公共的。但是什么是更好的约定呢?
Java本身在这方面并不一致。参见Collection vs. Comparable或Future vs. ScriptEngine。
当前回答
我总是写我在没有接口的情况下使用的东西,我在写一个直接的实现,也就是说,我将使用public。
其他回答
我将避免使用默认应用的修饰符。正如所指出的,它会导致不一致和混乱。
我见过的最糟糕的是一个方法声明为抽象的接口…
我总是写我在没有接口的情况下使用的东西,我在写一个直接的实现,也就是说,我将使用public。
接口中的方法在默认情况下是公共和抽象的,这在我看来是很符合逻辑和显而易见的。
接口中的方法在默认情况下是抽象的,用于强制实现类提供实现;在默认情况下是公共的,因此实现类可以访问实现。
在代码中添加这些修饰符是多余和无用的,只会让人认为您缺乏Java基础知识和/或理解。
这完全是主观的。我省略了多余的公共修饰符,因为它看起来很杂乱。正如其他人所提到的,一致性是这个决定的关键。
有趣的是,c#语言设计人员决定强制执行这一点。在c#中将接口方法声明为public实际上是一个编译错误。不过,一致性在语言之间可能并不重要,所以我猜这与Java并没有直接关系。
尽管这个问题很久以前就被问过了,但我觉得一个全面的描述可以解释为什么没有必要在方法之前使用公共抽象,在接口的常量之前使用公共静态final。
首先,接口用于为一组不相关的类指定通用方法,其中每个类都有唯一的实现。因此,不可能将访问修饰符指定为private,因为它不能被其他要重写的类访问。
第二,虽然可以初始化接口类型的对象,但接口是由实现它的类实现的,而不是继承的。由于接口可能由不在同一个包中的不同不相关的类实现(实现),因此受保护访问修饰符也无效。因此,对于访问修饰符,我们只剩下公共选择。
第三,接口没有任何数据实现,包括实例变量和方法。如果在逻辑上有理由在接口中插入实现的方法或实例变量,那么它必须是继承层次结构中的超类,而不是接口。考虑到这一点,由于没有方法可以在接口中实现,因此接口中的所有方法都必须是抽象的。
第四,Interface只能包含常量作为它的数据成员,这意味着它们必须是final常量,当然final常量被声明为静态以只保留它们的一个实例。因此,静态final也是接口常量的必须值。
因此,总的来说,虽然在接口的方法之前使用公共抽象,在接口的常量之前使用公共静态final是有效的,但由于没有其他选项,因此被认为是多余的,不使用。