首页 文章

java中的接口数组[重复]

提问于
浏览
3

这个问题在这里已有答案:

为什么这行在java中有效

我刚刚复制了一行程序,如果你可以向我解释一下 . 谢谢

Runnable r[] = new Runnable[5];

4 回答

  • 1

    通过对 Runable 数组进行延迟,您不会创建 Runable 接口的任何对象,而是 an object of a certain java array class . 所以编译器不会给出任何错误 . 您只是声明一个数组,其中元素必须是某些类的对象,这些类实现了 Runable 接口 .

    来自JLS:

    每个数组都有一个关联的Class对象,与具有相同组件类型的所有其他数组共享 . [This]就像:数组类型的直接超类是Object [和]每个数组类型实现接口Cloneable和java.io.Serializable .

  • 2

    您没有使用此行初始化任何元素,因此您尚未实现该接口 . 此时您不需要为类型接口的数组分配空间 . 在程序的后面,元素很可能被初始化,当它们完成时,它们完成了接口的实现,而不是接口本身 .

  • 1

    它是 only 一个引用数组,并且在通过创建新的 Runnable 对象初始化引用本身之前初始化是不完整的 .

    正如answer明确指出:

    对于引用(包含对象的任何内容)为null .

    你总能写:

    interface Foo{}
    
    Foo foo = null;
    
  • 0

    new Runnable[5] 创建一个 arrayRunnable 类型 . 它没有实例化 Runnable .

    无效代码将是一个caling new Runnable() . 换句话说,不允许的是接口类型的直接实例化,但是您可以创建一个类型为接口的数组 .

相关问题