黑马程序员技术交流社区

标题: 困惑很长时间的问题(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