日期:2014-05-20  浏览次数:20671 次

一个scjp的问题,本人小菜,搞不懂!(在线等……)
1. interface TestA { String toString(); }
2. public class Test {
3. public static void main(String[] args) {
4. System.out.println(new TestA() {
5. public String toString() { return “test”; }
6. });
7. }
8. }
What is the result?
A. test
B. null
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 1.
E. Compilation fails because of an error in line 4.
F. Compilation fails because of an error in line 5.
Answer: A

疑惑:为什么 TestA可以 用 new 啊,不是说接口不可以new的吗?


------解决方案--------------------
new ANotFinalClass() {
public String toString() { return “test”; }
}
匿名子类
------解决方案--------------------
new TestA() {
public String toString() { return “test”; }

implementents TestA接口的匿名内部类 的一个实例。编译器会生成一个名称类似Test$1的类
------解决方案--------------------
探讨
那new TestA() {
    public String toString() { return “test”; }
}
和接口类TestA具体什么关系呢?是的话,还可以用其他方法取代new TestA() {
    public String toString() { return “test”; }
} 还能得到同样的结果吗?

------解决方案--------------------
http://blog.csdn.net/yakihappy/archive/2009/03/11/3979863.aspx
------解决方案--------------------

new TestA() { 
public String toString() { return “test”; } 
}

匿名内部类..顾名思义是没名字的..{}里的东西就是实现TestA接口的方法...


------解决方案--------------------
new TestA() { 
public String toString() { return “test”; } 

匿名内部类