在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允许创建一个对象接口数组,以及在哪里有人可以使用它?Is是使用它的一种良好的编码实践,或者最好是创建一个实现接口的具体类,然后创建该类的数组。
发布于 2019-08-11 05:52:00
请注意,创建接口数组与创建接口实例不同。通过允许您创建接口数组,这并不意味着您现在也可以创建接口实例。
为了论证起见,让我们给ExampleInterface一个方法:
public interface ExampleInterface {
void foo();
}当你这样做时:
ExampleInterface[] arrI = new ExampleInterface[10];您只需创建一个由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]等方面是什么样子,所以没有什么坏消息。
使用它是一个好的编码实践,还是最好创建一个实现接口的具体类,然后创建该类的数组?
好吧,这是个不错的练习。有时你不能总是做后一件事。如果您想同时存储A和B的实例,这两个实例都实现了ExampleInterface,该怎么办?
https://stackoverflow.com/questions/57447590
复制相似问题