创建接口的“对象”

时间:2011-09-28 16:15:36

标签: java object interface

今天我与一位声称可以创建界面对象的朋友发生了争执。当我说这是不可能的时候,他向我展示了以下一段代码,它看起来与匿名类似。现在的问题是,什么是正确的答案?

public interface I {
    public void f();
}

public class InterfaceTest {
    public static void main(String []args){
        new I(){
            @Override
            public void f() {
                System.out.println("HELLO");                
            }           
        };
    }
}

这真的可以称为创建界面“对象”吗?

3 个答案:

答案 0 :(得分:2)

不,它是(实例)的匿名类。

答案 1 :(得分:2)

不,这是创建一个实现接口的匿名类的实例。

以下是Java Language Specification, section 15.9

的明确答案
  

非限定和限定类实例创建表达式都可以   可选地以类体结束。这样的类实例创建   expression声明一个匿名类(第15.9.5节)并创建一个   它的实例。

答案 2 :(得分:0)

这是匿名类创建。上面创建的实例的类扩展了java.lang.Object并实现了接口I.因此,从技术上讲,上面的代码创建了一个Object对象。