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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 全海波 中级黑马   /  2012-7-18 20:44  /  1560 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class ThreadDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Demo d1 = new Demo("张三");
  6.                 Demo d2 = new Demo("李四");
  7.                
  8.                 d1.start();
  9.                 d2.start();
  10.         }
  11. }
  12. class Demo extends Thread
  13. {
  14.         private String name;
  15.         Demo(String name)
  16.         {
  17.                 this.name = name;
  18.         }
  19.         public void run()
  20.         {
  21.                 for (int x = 0;x<60 ;x++ )
  22.                 {
  23.                         System.out.println(this.getName()+"----run..."+x);
  24.                 }
  25.         }
  26. }
  27. //为什么不能将该线程更名呢?
复制代码

7 个回复

倒序浏览
什么?:L
回复 使用道具 举报
本帖最后由 RWJ2012 于 2012-7-18 21:05 编辑

class Demo extends Thread

{

        private String name;

        Demo(String name)

        {
                super(name);               
                this.name = name;

        }

        public void run()

        {

                for (int x = 0;x<60 ;x++ )

                {

                        System.out.println(this.getName()+"----run..."+x);

                }

        }

}

在Demo的构造方法中加一句super(name)就可以了,要调用父类的构造方法,才能自定义线程的名字。
回复 使用道具 举报
父类的构造方法不能被子类继承,你的demo类继承自Thread类,你在new一个demo类型的实例的时候,会先调用父类Thread的构造方法,而所有类的默认构造方法是无参构造方法,除非你显示定义构造方法,同样Thread也不例外,你要想让你的线程有名字,因为构造方法不能继承,而给线程命名是在构造函数里实现的,所以,你就要显示声明父类Thread的构造方法,即public Thread(String name),参数:name - 新线程的名称,而在子类中,就应该使用super(name)关键字来实现调用父类的构造方法。

正确程序如下:
  1. package exercise;

  2. class ThreadDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Demo d1 = new Demo("张三");
  7.                 Demo d2 = new Demo("李四");
  8.                
  9.                 d1.start();
  10.                 d2.start();
  11.         }
  12. }
  13. class Demo extends Thread
  14. {
  15.         private String name;
  16.         Demo(String name)
  17.         {
  18.                 super(name);
  19.         }
  20.         public void run()
  21.         {
  22.                 for (int x = 0;x<60 ;x++ )
  23.                 {
  24.                         System.out.println(this.getName()+"----run..."+x);
  25.                 }
  26.         }
  27. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
王宝康 发表于 2012-7-18 21:35
父类的构造方法不能被子类继承,你的demo类继承自Thread类,你在new一个demo类型的实例的时候,会先调用父 ...
  1. class GetTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 ZiGetSet zgs = new ZiGetSet("lisi");
  6.                 String M = zgs.getName();
  7.                 System.out.println(M);
  8.         }
  9. }
  10. class FuGetSet
  11. {
  12.         private String name = "yi";

  13.    FuGetSet(){}

  14.     public void FuGetSet(String name)
  15.         {
  16.                 this.name = name;
  17.         }
  18.         public String getName()
  19.         {
  20.                 return name;
  21.         }
  22.     public void  setName()
  23.         {
  24.                 this.name = name;
  25.         }
  26. }
  27. class ZiGetSet extends FuGetSet
  28. {
  29.         private String name;

  30.         private String sex;

  31.     ZiGetSet(){}

  32.     ZiGetSet(String name)
  33.         {
  34.                 this.name = name;
  35.         }
  36.         void ZiGetSet(String name,String sex)
  37.         {
  38.                 this.name = name;
  39.                 this.sex = sex;
  40.         }
  41.         public String getName()
  42.         {
  43.                 return name;
  44.         }
  45.         public void setName(String name)
  46.         {
  47.                 this.name = name;
  48.         }
  49.         public String getSex()
  50.         {
  51.                 return sex;
  52.         }
  53.         public void setSex()
  54.         {
  55.                 this.sex = sex;
  56.         }

  57. }
复制代码
为何这个就能改呢?
回复 使用道具 举报
全海波 发表于 2012-7-18 22:15
为何这个就能改呢?

你在new一个子类实例的时候,会去调用父类的构造方法,构造方法默认是无参数的,你现在调用的是父类,即Thread类的Thread(String name) 这个构造方法,然后这个构造方法的作用就是,分配新的 Thread 对象,其中name是这个Thread 对象的名字。
         
回复 使用道具 举报
我被这个霸气侧漏的标题吸引了
回复 使用道具 举报
{:soso_e113:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马