创建接口的“对象”
今天我与一位声称可以创建界面对象的朋友争论不休。 当我说这是不可能的时候,他向我展示了以下一段代码,它看起来与匿名类似。现在的问题是,什么是正确的答案?
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节)并创建了它的实例。
不,它是(一个实例 )的匿名类。
这是匿名类创建。 上面创建的实例的类扩展了java.lang.Object并实现了接口I.因此,从技术上讲,上面的代码创建了一个Object对象。
- IntelliJ IDEA将final添加到自动生成的setter中
- 卡夫卡制作人类未找到例外
- 如何获取对DLL的Java JNA调用以获取参数中返回的数据?
- Glassfish无法在root用户部署,因为声明了default-web-module
- Eclipse的UML插件 – 类图和Java代码生成 – Indigo / Juno
- Java GUI JProgressBar没有绘画
- 将RMI限制为一个端口的含义
- Hibernate在EntityTuplizerFactory.constructTuplizer中失败并出现NullPointerException? 为什么?
- jackson:无法反序列化START_OBJECT令牌中的Number实例