The*_*ain 4 java null class dynamic
我是使用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 );
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这个程序的输出将是:
abc
abc
abc
Run Code Online (Sandbox Code Playgroud)
相反,它是:
abc
null
abc
Run Code Online (Sandbox Code Playgroud)
我真的很困惑为什么会这样.我自学了这个功能,所以我真的不太了解它.任何帮助表示赞赏.谢谢!
多态性不适用于字段.当你这样做
System.out.println( e.a );
Run Code Online (Sandbox Code Playgroud)
现场a正在对申报/静态类型的解决e是Test.由于您尚未明确初始化它,因此默认为null.
您的声明是a在匿名类中调用的字段
Test e = new Test() {
public String a = s;
};
Run Code Online (Sandbox Code Playgroud)
是hiding其父类中的同名字段.
您可以改为使用初始化块
Test e = new Test() {
{
a = s;
}
};
Run Code Online (Sandbox Code Playgroud)
因为子类可以访问该字段.