【问题标题】:Array of Data Type Interface数据类型接口数组
【发布时间】:2019-08-11 05:38:56
【问题描述】:

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

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 允许创建对象接口数组以及有人可能在哪里使用它?使用它是一种很好的编码习惯,或者最好创建一个实现接口的具体类,然后创建该类的数组。

【问题讨论】:

    标签: java arrays interface


    【解决方案1】:

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

    让我们给ExampleInterface一个方法以供论证:

    public interface ExampleInterface {
        void foo();
    }
    

    当你这样做时:

    ExampleInterface[] arrI = new ExampleInterface[10];
    

    您只是在创建一个由十个元素组成的数组,如下所示:

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

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

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

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

    最终,我们仍然不知道arrI[0]arrI[1]array[2] 等的foo 的实现是什么样的,所以没有任何问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2021-06-16
      • 1970-01-01
      • 2016-02-22
      • 2012-11-04
      相关资源
      最近更新 更多