用于SCJP的测试杀手310-065(Java)

时间:2015-09-30 17:06:26

标签: java scjp

假设:

interface TestA {String toString();}
public class Test{
  public static void main(String[] args){
     System.out.println(new TestA()){
        public String toString() {return "test";}
     }
  }
}

在本书中,此代码的结果是test.But我认为TestA是一个接口,您无法为TestA创建实例。任何人都可以向我解释这个吗?

2 个答案:

答案 0 :(得分:3)

新的TestA()......它是一个匿名类,但括号周围有拼写错误,应如下所示:

interface TestA {String toString();}
public class Test{
  public static void main(String[] args){
     System.out.println(new TestA(){
        public String toString() {return "test";}
     });
  }
}

答案 1 :(得分:0)

这个问题的真正含义是你是否可以创建一个在另一个类中实现接口的匿名内部类。这正是上面原始代码中发生的事情。在Test类main方法的System.out.println()内部,创建了一个匿名内部类,它实现了TestA接口中定义的toString()方法。该方法的实现返回单词" test"作为一个字符串。看看

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html

进一步说明。