怀疑与Java中的接口实例化有关

时间:2010-01-29 08:10:01

标签: java

运行时的以下程序将产品stackoverflow作为输出。 我想知道在实例化TestA的行中发生了什么。

interface TestA { String toString(); }

class Test 
{
  public static void main(String[] args) 
  {
     // whats going on in this line ???
     System.out.println(new TestA() {public String toString() { return "stackoverflow"; } });
  }
}

3 个答案:

答案 0 :(得分:7)

您正在实例化anonymous class,它实现了TestA接口。

这种技术对于例如GUI编程中的event listeners,因为它可以帮助您避免创建一堆命名的一次性类。

答案 1 :(得分:3)

您正在做的是创建一个实现该接口的匿名类。 为了使它更清晰一点,你也可以写一下:

interface TestA { String toString(); }

class Test 
{
  public static void main(String[] args) 
  {
    TestA test = new TestA()
    {
        public String toString()
        {
            return "stackoverflow";
        }
    };

    System.out.println(test);
  }
}

答案 2 :(得分:1)

以下课程即时创建(没有任何名称):

class Annonymous implements TestA 
{ 
    String toString() {
        return "stackoverflow";
    } 
}
相关问题