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