数据类型接口的数组



在Java中,我们使用Interface对用户隐藏实现。接口只包含抽象方法,由于抽象方法没有主体,我们不能在没有构造函数的情况下创建对象。像这样的东西

public interface ExampleInterface {
}
public class Example implements ExampleInterface {
private static void main(String[] args) {
// This is not possible
ExampleInterface objI = new ExampleInterface();
// However this is
ExampleInterface[] arrI = new ExampleInterface[10];
}
}

我的问题是为什么Java允许创建对象接口数组以及有人可能会在哪里使用它?使用它是一个很好的编码实践,或者最好创建一个实现接口的具体类,然后创建该类的数组。

请注意,创建接口数组与创建接口实例不同。通过允许您创建接口数组,并不意味着您现在也可以创建接口实例。

为了论证,让我们给ExampleInterface一个方法:

public interface ExampleInterface {
void foo();
}

执行此操作时:

ExampleInterface[] arrI = new ExampleInterface[10];

您只是创建了一个包含十个元素的数组,如下所示:

{ null, null, null, null, null, null, null, null, null, null }

为什么null?因为这是任何引用类型的默认值。

如您所见,没有任何实例是使用上面的该行神奇地创建ExampleInterface。要替换这些null,您仍然必须使用实现ExampleInterface或从其他地方获取实例的类:

arrI[0] = new ExampleInterfaceImplementer();
// arrI[0] = new ExampleInterface(); // this still doesn't work

归根结底,我们仍然不知道foo的实现对于arrI[0]arrI[1]array[2]等等,所以没有什么被破坏。

使用它是一个很好的编码实践,还是最好创建一个实现接口的具体类,然后创建该类的数组?

嗯,这不是一个做法。有时你不能总是做后者。如果要存储AB的实例,它们都实现了ExampleInterface怎么办?

相关:"编程到接口"是什么意思?

最新更新