如果interface
没有构造函数,那么这段代码如何编译?
interface I {
List<Integer> LIST = Arrays.asList(1, 2, 3);
}
谁在这里初始化List
?
接口没有任何构造函数。事情
interface I {
List<Integer> LIST = Arrays.asList(1, 2, 3);
}
编译和工作,因为LIST
是接口的一个变量,可用于所有实现I
. 接口可以被认为是具有相同数据字段和方法的类的通用原型,即除变量外,所有实现者都需要实现它们。
变量在VM
加载实现接口的类时被初始化。
在接口中声明的每个实例成员都是静态的。所以,LIST
是静态的、最终的和公开的。
因此,当您想从名为 的接口访问成员ILIST
时,可以使用:LIST.I
但是由于封装,您不希望公共成员不是最终的。通常,这些静态最终成员为特定类型的实例。引用形状的 Type 将具有 Circle 或 Square 的最终静态实例。
前任:
Class shape {
public final shape Circle;
public shape();
void setX() {};
void getX() { return x;}
}
看java.lang.Long
,它有MIN_VALUE和MAX_VALUE这样的实例。
面向对象编程需要使用getX()
和setX()
函数来维护封装。
Java 定义的接口是静态的、公共的和最终的。
如果不提供一对{ 和 }之间的实现,则无法实例化接口。
new InterfaceA() { int getA() { blah...;return x} };