Java直接修改类,null引用?

时间:2013-10-08 22:12:39

标签: java class dynamic null

我是使用Java的新CLASS_NAME(){STUFF}功能的新手,但我遇到的内容似乎很奇怪。 请考虑以下代码:

class Test
{
    public String a;
    public static void main( String[] args ) throws java.lang.Exception
    {
        String j = "abc";
        //Emulating passing an argument as I did in my code.//
        final String s = j;
        Test v = new Test();
        v.a = s;
        Test e = new Test() {
            public String a = s;
        };
        Test g = new Test();
        g.a = s;
        System.out.println( v.a );
        System.out.println( e.a );
        System.out.println( g.a );
    }
}

我认为这个程序的输出是:

abc

abc

abc

取而代之的是:

abc

null

abc

我真的很困惑为什么会这样。 我自学了这个功能,所以我真的不太了解它。 任何帮助表示赞赏。 谢谢!

1 个答案:

答案 0 :(得分:7)

These are called anonymous classes.

多态性不适用于字段。当你这样做

System.out.println( e.a );

正在a的{​​{1}}的声明/静态类型上解析字段e。由于您尚未明确初始化它,因此默认为Test

您的声明在匿名类

中有一个名为null的字段
a

Test e = new Test() { public String a = s; }; 其父类中相同名称的字段。

您可以使用初始化块

hiding

因为子类可以访问该字段。