下面两段代码,为什么结果是 Test1 a = 0; Test1 MyString = null; 在这初始化中,我那里写错了?
代码1:
public class Test1{
int a;
String MyString;
public void geta(){};
public void getMyString(){};
}
代码2:
public class Test{
public Test1 test1(final int a, final String MyString){
return new Test1(a, MyString){
private int a;
private String MyString;
{
this.a = a;
this.MyString = MyString;
}
public void geta(){System.out.println("Test1 a = " + a);}
public void getMyString(){System.out.println("Test1 MyString = " + MyString);}
};
}
public static void main(String[] args){
Test test = new Test();
Test1 test1 = test.test1(10,"this is MyString");
test1.geta();
test1.getMyString();
}
}
代码1:
public class Test1{
int a;
String MyString;
public void geta(){};
public void getMyString(){};
}
代码2:
public class Test{
public Test1 test1(final int a, final String MyString){
return new Test1(a, MyString){
private int a;
private String MyString;
{
this.a = a;
this.MyString = MyString;
}
public void geta(){System.out.println("Test1 a = " + a);}
public void getMyString(){System.out.println("Test1 MyString = " + MyString);}
};
}
public static void main(String[] args){
Test test = new Test();
Test1 test1 = test.test1(10,"this is MyString");
test1.geta();
test1.getMyString();
}
}
楼主【llm0528】截止到2008-07-25 22:04:42的历史汇总数据(不包括此帖):
发帖的总数量:59 发帖的总分数:1220 每贴平均分数:20
回帖的总数量:51 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:59 结贴的总分数:1220
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
public class Test{
public Test1 test1(final int b, final String MyString){ //这里改为b
return new Test1(){
private int a;
private String MyString;
{
this.a = b;//这里也改为b ,结果就是10了,这个问题我也不理解,高手解释一下吧
this.MyString = MyString;
}
public void geta(){System.out.println("Test1 a = " + a);}
public void getMyString(){System.out.println("Test1 MyString = " + MyString);}
};
}
public static void main(String[] args){
Test test = new Test();
Test1 test1 = test.test1(10,"this is MyString");
test1.geta();
test1.getMyString();
}
}
我写这代码主要是验证下,初始化块在匿名类里是不是真的能起到初始化的作用,至于为什么修改名字就能得到想要的结果,还望高手能够作出解答~~
public class Test{
public Test1 test1(final int b, final String MyString2){
return new Test1(){
private int a;
private String MyString;
{
a = b; //修改处
MyString = MyString2; //修改处
}
public void geta(){System.out.println("Test1 a = " + a);}
public void getMyString(){System.out.println("Test1 MyString = " + MyString);}
};
}
public static void main(String[] args){
Test test = new Test();
Test1 test1 = test.test1(10,"this is MyString");
test1.geta();
test1.getMyString();
}
}Test1代码:
public class Test1{
int a;
String MyString;
Test1(int a, String MyString){
this.a = a;
this.MyString = MyString;
}
public void geta(){};
public void getMyString(){};
}
String MyString;
子类就没有必要再定义了,而且即使父类构造方法正确的添加了,初始化的也是父类中声明的变量.对这个例子还是没有意义的.
private String MyString;
和外面方法中的变量不同名就可以了.