黑马程序员技术交流社区
标题:
获取线程对象自定义名称的问题
[打印本页]
作者:
刘士林
时间:
2012-10-31 21:04
标题:
获取线程对象自定义名称的问题
class Test extends Thread
{
private String name;
Test(String name)
{
this.name=name;
}
public void run()
{
System.out.println(this.getName());//打印的是Thread-0
}
class Test extends Thread
{
Test(String name)
{
super(name);
}
public void run()
{
System.out.println(this.getName());//打印的是自定义的name
}
为什么用this.name=name;时,打印的线程名称就是默认的
而用super(name);时,打印的就是自定义的呢?
毕老师说,Thread类中已定义好了给线程起名字的方法,可以直接调用,但是Test继承Thread之后
它其中也就有了getName()方法,它的返回值肯定是rerurn this.name,而本类中就有name属性,为什么不返回,却返回默认名呢?
就算调用super(name)方法,它其中应该也是this.name=name,为什么就能打印出自定义的线程名称?
作者:
jsfjb
时间:
2012-10-31 21:33
如果 要是在这儿你想说是this.name=name,后 调用 getName 方法 打印出this.name的值,那么您就要重写getName的方法。
您调用的getName的方法只是调用的父类的方法,父类的方法调用的是父类的元素。而super(name)则,把参数传给了父类。所以调用getname可以查看出来。
我想应该是这样的。
作者:
林志进
时间:
2012-11-1 00:04
private String name;
Test(String name) {
super(name); // 如果只用super(name),你会发现一点,下面的打印打语句打印出来的name为null
System.out.println(name)
// this.name=name;除非赋值以后再打印名字才会出来。这说明了一点,你这个对象调用getName方法实际上根本与你该对象本身无关。
//调用的实际上父类的方法,父类调用的其实就是子类对象赋值给父类的属性,通过super
如果想子类自己调用的话,需要重写。但是Thread类的getName是final修饰的,所以只能新写个函数了。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2