黑马程序员技术交流社区
标题:
子类构造函数初始化和父类的关系
[打印本页]
作者:
尘埃落定
时间:
2014-7-26 15:08
标题:
子类构造函数初始化和父类的关系
请见代码中的注释部分,求答案。
package p_0726;
class Test extends Thread
{
private String name;
Test(String name)
{
this.name=name;
}
public void run()
{
for (int x = 0;x < 60 ;x++ )
{
System.out.println(getName()+"--run---x="+x);
} //此处的getName怎么不是构造函数初始化的名字?
} //this.name=name;改成 super(name)就可以打印出构造函数初始化的名字,啥情况?
}
class ThreadDemo
{
public static void main(String[] args)
{
Test t1 = new Test("thread_1");
Test t2 = new Test("thread_2");
t1.start();
t2.start();
for (int y = 0;y < 60 ;y++ )
{
System.out.println("main-----y="+y);
}
}
}
复制代码
作者:
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