首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据类型接口数组

数据类型接口数组
EN

Stack Overflow用户
提问于 2019-08-11 05:38:56
回答 1查看 169关注 0票数 7

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

代码语言:javascript
复制
public interface ExampleInterface {
}
代码语言:javascript
复制
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是使用它的一种良好的编码实践,或者最好是创建一个实现接口的具体类,然后创建该类的数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 05:52:00

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

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

代码语言:javascript
复制
public interface ExampleInterface {
    void foo();
}

当你这样做时:

代码语言:javascript
复制
ExampleInterface[] arrI = new ExampleInterface[10];

您只需创建一个由10个元素组成的数组,如下所示:

代码语言:javascript
复制
{ null, null, null, null, null, null, null, null, null, null }

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

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

代码语言:javascript
复制
arrI[0] = new ExampleInterfaceImplementer();
// arrI[0] = new ExampleInterface(); // this still doesn't work

说到底,我们仍然不知道foo的实现在arrI[0]arrI[1]array[2]等方面是什么样子,所以没有什么坏消息。

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

好吧,这是个不错的练习。有时你不能总是做后一件事。如果您想同时存储AB的实例,这两个实例都实现了ExampleInterface,该怎么办?

相关:What does it mean to "program to an interface"?

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57447590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档