A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 寇弘禄 中级黑马   /  2013-3-3 20:11  /  1643 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 寇弘禄 于 2013-3-12 09:42 编辑
  1. *package test;

  2. public class ThisTest extends SuperTest{
  3.         public String name = "山东";
  4.         ThisTest(){
  5.                
  6.         }
  7.         ThisTest(String name){
  8.                 super(name);
  9.                 System.out.println("aaaaa.......");
  10.         }
  11.         
  12.         public void setName(String name){
  13.                 this.name = name;
  14.         }
  15.         public static void main(String[] args){
  16.                 ThisTest tt = new ThisTest("北京");
  17.                 ThisTest tt2 = new ThisTest("天津");
  18.                 //tt.setName("广州");
  19.                 System.out.println(tt.name+"......"+tt2.name);     //这里的输出结果是  --山东......山东
  20.                                                                                                                    //为什么不是北京......天津
  21.         }
  22. }
  23. class SuperTest{
  24.         public String name = "云南";
  25.         SuperTest(){
  26.                
  27.         }
  28.         SuperTest(String name){
  29.                 this.name = name;
  30.                 System.out.println("bbbbbb...................");
  31.         }
  32. }
复制代码
  1. package test;

  2. public class Test{
  3.         public String name = "山东";
  4.         Test(){
  5.                 System.out.println("aaaaa.......");
  6.         }
  7.         Test(String name){
  8.                 this.name = name;        
  9.         }
  10.         public void setName(String name){
  11.                 this.name = name;
  12.         }
  13.         
  14.         public static void main(String[] args){
  15.                 Test tt = new Test("北京");
  16.                 Test tt2 = new Test("天津");
  17.                 //tt.setName("上海");
  18.                 System.out.println(tt.name+"......"+tt2.name);    //为什么没有父类的情况下就能输出--北京......天津
  19.         }
  20. }
复制代码
为什么上面那个有父类的,其对象的数据结果是父类中的默认值,而下面那个却能输出通过构造函数赋的值。

点评

问题解决了,请写改为已解决,谢谢  发表于 2013-3-11 12:38

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

4 个回复

倒序浏览
你上面的程序,子类的构造方法调用了super(name) 也就是把父类中的name赋值了,并没有去覆盖子类的name,但是你在输出的时候却是在输出子类的name,于是就输出山东......山东;没有继承关系之后,你用构造方法给本类的name赋值,于是输出结果就变成了北京......天津

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
tt和tt2没有调用ThisTest这个类中的构造方法,  而是把父类的name初始化了。

加个this就好了
ThisTest(String name){

                super(name);
                this.name = name;
                 System.out.println("aaaaa.......");

     }

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
ThisTest(String name){
                super(name);
                System.out.println("aaaaa.......");
        }
跟楼上看法一样,你的构造函数只是给父类的String name赋值,子类跟父类中有相同的变量名,所以你调用子类对象name输出时是子类的变量“山东”。
第二个问题是因为Test(String name){

                this.name = name;        

        }

this本身代表本类对象,所以当然是给本类对象赋值了。输出的是你所赋的值。
希望可以帮到你。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
明白了,谢谢几位。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马