new Test()和new Test(){}之间的区别


问题内容

这两种实例化类的新对象的方式之间有什么区别,如下所示:

Test t1=new Test();
Test t2=new Test(){ };

当我尝试以下代码时,我可以看到两个对象都可以访问方法foo(),但是t2无法访问variable xvariable x无法解析):

public class Test
{ 
    int x=0;
    public void foo(){ }

    public static void main (String args[])
    {
        Test t1=new Test();
        Test t2=new Test(){ };
        t1.x=10;
        t2.x=20;
        t1.foo();
        t2.foo();
        System.out.println(t1.x+" "t2.x);
    }
}

问题答案:

Test t2=new Test(); 将创建Test类的对象。

但是Test t2=new Test(){ };将创建一个测试子类的对象(在这种情况下,即匿名内部类)。

您可以在那提供任何方法的实现

Test t2=new Test(){ 
public void foo(){ System.out.println("This is foo");}
};

这样,当foo()从对象调用方法时t2,它将打印出来This is foo

加成

代码中的编译时错误是由于缺少条件运算符

System.out.println(t1.x+" "+t2.x);
                          ###