有人能告诉我指定interface public和abstract之间的区别吗?
public interface Test{}
和
abstract interface Test{}
答案 0 :(得分:4)
前者是一个可以从任何地方访问的界面。后者(因为abstract是superfluous)是一个可以在同一个包中访问的接口,因为它有默认的访问修饰符。
答案 1 :(得分:0)
接口是隐含的抽象。因此不需要abstract interface
。
来自JLS:http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.1.1.1
9.1.1.1。抽象接口
每个界面都是隐式抽象的。
此修饰符已过时,不应在新程序中使用。
答案 2 :(得分:0)
将接口声明为abstract
是多余的,因为它们都是abstract
的定义。那么唯一的区别就是public
组件。您的第一个界面(公共)可以从任何地方访问,而您的第二个界面(具有默认可见性)是包私有的,这意味着它只能在自己的包中访问。
答案 3 :(得分:0)
public abstract interface
表示它将在所有包中提供。但由于默认访问,abstract interface
仅在当前包中可用。在此处阅读有关访问说明符的更多信息:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
包本质上是抽象的,这意味着它们无法被实现。包中的所有方法都是抽象的。使用纯粹抽象的方法,强制实现类来覆盖它们。
答案 4 :(得分:0)
与往常一样,JLS提供了答案(JLS 9.1.1.1):
每个界面都是隐式抽象的。
当然,我假设您的意思是在第二个示例中包含public
修饰符。如果不这样做,那么两者之间还存在其他差异 - 但它们与abstract
关键字无关。