今天,我和一个朋友吵了一架,他声称可以创建接口对象。当我说这不可能的时候,他给我看了下面的代码,看起来与匿名类相似。现在的问题是,正确的答案是什么?
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"); } }; } }
这真的可以称为创建接口“对象”吗?
不,这是创建实现该接口的匿名类的实例。
这是Java语言规范第15.9节中的明确答案:
不合格和合格的类实例创建表达式都可以选择以类主体结尾。这样的类实例创建表达式声明一个匿名类(第15.9.5节)并创建一个实例。