今天我与一位声称可以创建界面对象的朋友发生了争执。当我说这是不可能的时候,他向我展示了以下一段代码,它看起来与匿名类似。现在的问题是,什么是正确的答案?
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");
}
};
}
}
这真的可以称为创建界面“对象”吗?
答案 0 :(得分:2)
不,它是(实例)的匿名类。
答案 1 :(得分:2)
不,这是创建一个实现接口的匿名类的实例。
以下是Java Language Specification, section 15.9:
的明确答案非限定和限定类实例创建表达式都可以 可选地以类体结束。这样的类实例创建 expression声明一个匿名类(第15.9.5节)并创建一个 它的实例。
答案 2 :(得分:0)
这是匿名类创建。上面创建的实例的类扩展了java.lang.Object并实现了接口I.因此,从技术上讲,上面的代码创建了一个Object对象。