我们可以创build一个接口的对象吗?
interface TestA { String toString(); } public class Test { public static void main(String[] args) { System.out.println(new TestA() { public String toString() { return "test"; } }); } }
结果是什么?
一个testing
B. null
C.在运行时抛出exception。
D.编译失败,因为第1行中有错误。
E.编译失败,因为第4行有错误。
F.编译失败,因为第5行有错误。
这个问题的答案是什么?为什么? 我还有一个关于这个问题的查询。 在第4行中,我们创build了一个对象A.是否可以创build一个接口的对象?
你在这里看到的是一个匿名的内部类 :
鉴于以下界面:
interface Inter { public String getString(); }
你可以像这样创build一个实例:
Inter instance = new Inter() { @Override public String getString() { return "HI"; } };
现在,你有一个你定义的接口的实例。 但是,你应该注意到你实际做的是定义了一个实现接口并同时实例化类的类。
test
应该是输出。 这是一个匿名内部类的例子。
这是一个与Comparator
接口一起使用的非常常见的模式,用来模拟闭包。
这个技巧并不是关于匿名的内部类,这打印testing的原因它覆盖了toString方法,而当System.out.println一个对象它隐式调用它的toString方法。
试试这个…匿名类的名字是生成的!
Inter instance = new Inter() { public String getString(){ return "HI"+this.getClass(); } };
我不知道这个问题的意义。 如果这是面试问题,那么我可以说没关系。 但是实时地实施inheritance并不是正确的方法。所以要回答这个问题,在这里你所做的是一个匿名的内部类 。
在这里你正在实例化一个类并通过编写来实现inheritance ,
System.out.println(new TestA() { public String toString() { return “test”; } });
结果当然是test