黑马程序员技术交流社区

标题: 子类构造函数初始化和父类的关系 [打印本页]

作者: 尘埃落定    时间: 2014-7-26 15:08
标题: 子类构造函数初始化和父类的关系
请见代码中的注释部分,求答案。

  1. package p_0726;
  2. class Test extends Thread
  3. {
  4.         private String name;
  5.         Test(String name)
  6.         {
  7.                 this.name=name;
  8.         }
  9.         public void run()
  10.         {
  11.                 for (int x = 0;x < 60 ;x++ )
  12.                 {
  13.                         System.out.println(getName()+"--run---x="+x);
  14.                 }                                        //此处的getName怎么不是构造函数初始化的名字?        
  15.         }                                                //this.name=name;改成 super(name)就可以打印出构造函数初始化的名字,啥情况?
  16. }
  17. class ThreadDemo
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 Test t1 = new Test("thread_1");
  22.                 Test t2 = new Test("thread_2");
  23.                 t1.start();
  24.                 t2.start();

  25.                 for (int y = 0;y < 60 ;y++ )
  26.                 {
  27.                         System.out.println("main-----y="+y);
  28.                 }
  29.         }
  30. }
复制代码



作者: chen010yu    时间: 2014-7-26 19:47
子类中没有重写父类的getName()方法,当你调用这个方法时,它获取的是父类中的name值(也就是继承来的值);当你使用super(name)时,是通过父类中的构造方法对name进行初始化,所以在使用getName()方法就可以获取正确的name值了。

希望能帮到你!
作者: Wokno    时间: 2014-7-26 20:08
Thread类中的方法被final所修饰,所以不能被重写,修改线程名两种方式,一种是通过超类的构造方法,第二种是通过setName();方法。
作者: 尘埃落定    时间: 2014-7-26 23:59
chen010yu 发表于 2014-7-26 19:47
子类中没有重写父类的getName()方法,当你调用这个方法时,它获取的是父类中的name值(也就是继承来的值) ...

有道理......:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2