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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张海涛 中级黑马   /  2013-1-15 20:57  /  1352 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 10:52 编辑

class Test extends Thread
{
    private String name;
    Test(String name)
    {
        super(name);
        //this.name=name;
    }
    public void run()
    {
    System.out.println(this.getName()+"--run----");
    }
}

class ThreadTest
{
    public static void main(String[] args)
    {
        Test t1=new Test("first");
        Test t2=new Test("two");
        t1.start();
        t2.start();
    }
}

请问,为什么用super(name);可以打印出所设置的名字,而用this.name=name;就打印不出来呢?求解!!

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
本帖最后由 黑马刘杰 于 2013-1-15 21:16 编辑

这里this.getName()是类Thread的方法,用来获取线程的名字。当执行super(name)时,执行了Thread的构造方法
public Thread(String name) {
        init(null, null, name, 0);
}
将线程名字设置为你所传过来的名字。
没有super(name)时调用的父类的默认构造方法,并没有调用父类Thread的这个构造方法,所以就不会设置线程的名字
this.name=name只是在new出来的对象里对一个变量赋了值,不起什么作用

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
你用继承了,默认调用无惨super() ,若你用this.name=name,那么父类根本没初始化,子类的getName()根本无效的覆写,打印出来的肯定不是你初始化的值撒
若把代码中this.getName() 改成super.getName() 执行结果是一样滴,LZ应该能理解了

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马