关于界面概念的澄清

时间:2014-10-28 10:42:18

标签: java string ant static

interface A 
{
    public void printValue();
}

public class Test
{ 
    public static void main (String[] args)
    {
        A a1 = new A() { 
            public void printValue()
            {
                System.out.println("A");
            }
        };
        a1.printValue(); 
    }
}

我们无法创建接口的实例,但new A()在此代码中做了什么?我见过这种类型的代码主要用于比较器。请解释一下。

3 个答案:

答案 0 :(得分:5)

new A() {}是实现接口A的匿名类的实例化。

如果您需要只在一个地方实现接口的类实例,那么这是一个快捷方式,因此您不希望定义普通类。这样,您可以在使用它的同一位置定义类。

在您的代码示例中,它似乎并不是非常有用,但通常通过将匿名类实例传递给接受接口类型参数的某个方法来使用它。

答案 1 :(得分:1)

下面的新A()是实例化实现接口A的具体类(我们称之为匿名)的地方

 A a1 = new A() { 
  public void printValue(){
  System.out.println("A");
  }
 };

答案 2 :(得分:0)

在您的代码中,接口A用作Anonymous类。如果您只需要使用本地类一次,则可以使用它们。它与lambda表达式相同。 阅读更多:http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html 阅读lambda表达式:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html