黑马程序员技术交流社区
标题:
通过构造函数赋值,
[打印本页]
作者:
寇弘禄
时间:
2013-3-3 20:11
标题:
通过构造函数赋值,
本帖最后由 寇弘禄 于 2013-3-12 09:42 编辑
*package test;
public class ThisTest extends SuperTest{
public String name = "山东";
ThisTest(){
}
ThisTest(String name){
super(name);
System.out.println("aaaaa.......");
}
public void setName(String name){
this.name = name;
}
public static void main(String[] args){
ThisTest tt = new ThisTest("北京");
ThisTest tt2 = new ThisTest("天津");
//tt.setName("广州");
System.out.println(tt.name+"......"+tt2.name); //这里的输出结果是 --山东......山东
//为什么不是北京......天津
}
}
class SuperTest{
public String name = "云南";
SuperTest(){
}
SuperTest(String name){
this.name = name;
System.out.println("bbbbbb...................");
}
}
复制代码
package test;
public class Test{
public String name = "山东";
Test(){
System.out.println("aaaaa.......");
}
Test(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public static void main(String[] args){
Test tt = new Test("北京");
Test tt2 = new Test("天津");
//tt.setName("上海");
System.out.println(tt.name+"......"+tt2.name); //为什么没有父类的情况下就能输出--北京......天津
}
}
复制代码
为什么上面那个有父类的,其对象的数据结果是父类中的默认值,而下面那个却能输出通过构造函数赋的值。
作者:
许鑫星
时间:
2013-3-3 20:15
你上面的程序,子类的构造方法调用了super(name) 也就是把父类中的name赋值了,并没有去覆盖子类的name,但是你在输出的时候却是在输出子类的name,于是就输出山东......山东;没有继承关系之后,你用构造方法给本类的name赋值,于是输出结果就变成了北京......天津
作者:
Gaara
时间:
2013-3-3 20:28
tt和tt2没有调用ThisTest这个类中的构造方法, 而是把父类的name初始化了。
加个this就好了
ThisTest(String name){
super(name);
this.name = name;
System.out.println("aaaaa.......");
}
作者:
张子凯
时间:
2013-3-3 20:29
ThisTest(String name){
super(name);
System.out.println("aaaaa.......");
}
跟楼上看法一样,你的构造函数只是给父类的String name赋值,子类跟父类中有相同的变量名,所以你调用子类对象name输出时是子类的变量“山东”。
第二个问题是因为Test(String name){
this.name = name;
}
this本身代表本类对象,所以当然是给本类对象赋值了。输出的是你所赋的值。
希望可以帮到你。
作者:
寇弘禄
时间:
2013-3-3 20:39
明白了,谢谢几位。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2