黑马程序员技术交流社区
标题:
困惑很长时间的问题(super)
[打印本页]
作者:
杜佳瑞
时间:
2012-7-29 15:05
标题:
困惑很长时间的问题(super)
本帖最后由 杜佳瑞 于 2012-7-29 15:36 编辑
在毕老师视频中,学到多线程时有这么一个问题,其实这个问题早在异常那会就有了,现在还是没有弄懂,问题如下
class Test extends Thread
{
private String name;
Test(String name)
{
super(name);
//this.name=name;
}
一个是用子类构造函数赋值,一个是调用父类构造函数赋值,我认为应该效果一样的,可是后面调用getName()函数时,产生的结果就是不一样了。用super父类构造函数能调用getName,为什么用子类this.name=name就不能呢,不是子类也继承了这个方法吗?还有前面学习异常的时候有一个负数异常那会我就没有弄懂,super就会调用getMessage,而在子类构造函数里面直接赋值后,后期就不会调用getMessage,这是为啥呢?求解!
public void run()
{
for(int x=0;x<60;x++)
{
System.out.println(
this.getName()
+" run..."+x);
}
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1=new Test("one---");
Test t2=new Test("two+++");
t1.start();
t2.start();
for(int x=0;x<60;x++)
{
System.out.println("main......"+x);
}
}
}
作者:
肖琦
时间:
2012-7-29 16:34
首先,父类的方法是无法调用子类的属性的。你在子类里设了一个和父类同名的字段,name,但是对象存到内存中时,
还是会保留Thread原先的name属性,只是因为它是private的,所以子类无法访问,但父类的getName()方法还是访问的Thread里的name.
而且,你不要凭直觉就猜测Thread类里面的name是字符串,getName只是简单的返回这个name的字符串,实际上,Thread里的name是一个字符数组
。
作者:
陈汉维
时间:
2012-7-29 16:36
因为private String name;,name是私有的,子类继承父类的时候没有继承私有的变量name,只能通过getName来访问
毕向东第8天的继承里有说到你这种情况,我记得好像是图解那个视频,你可以看看。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2