A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李节起 中级黑马   /  2012-4-9 13:39  /  3149 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test extends Thread
{
       
        Test(String name)
        {
                //this.name = name;
                super(name);  //此处为什么用super();就可以用到下面的"one---","two+++"?
        }


。省略



class ThreadTest
{
        public static void main(String[] args)
        {
                Test t1 = new Test("one---");
                Test t2 = new Test("two+++");


。。。省略。。。。


在Java中,this通常指当前对象,super则指父类的。下面的ThreadTest 类是上面test的父类吗?:time:

8 个回复

正序浏览
子类没有的方法而他的父类(super)里边有的话,可以通过(super)来调用。
回复 使用道具 举报
pray 高级黑马 2014-4-26 08:05:04
8#
初来乍到,请多多关照。。。
回复 使用道具 举报
这个问题确实非常蛋疼,在第九天讲自定义异常类的时候就会讲到,结果昨天想了半天还是没搞懂,我觉得我可
能到现在还没完全弄懂,先说下我的理解,错误的地方,烦请纠正.
Test(String name)这个是构造方法,Test是Thread子类,好吧:
1.super语句一定要定义在子类构造方法的第一行.因为子类会具备父类中的数据,所以要先明确父类是如何对

这些数据初始化的,所以要先初始化父类,所以第一行应该是super语句.当然了,也可以用this()访问本类的构

造方法.
2.当父类中没有空参数的构造函方法时,子类必须手动通过super()语句指定要访问父类中的构造方法.所以可

能是因为Thread里面没有定义空参数的构造方法,而是只定义了带参数的构造方法,就是
Thread(String name)
        {
            this.name = name;
        }
所以Test(String name)
{

}
第一行要写super(name);写了之后就能实例化Test对象往name赋值了.
3..this.用于在成员变量和局部变量同名时区分,表示所在类成员变量.也就是说你Thread里面的那个

this.name是指Thread的成员变量name,this指Thread.
4.所以lz的完整代码应该是这样吧:
class Thread
{
        String name;
        Thread(String name)
        {
                this.name=name;
        }
}
class Test extends Thread
{
      
        Test(String name)
        {      
                super(name);
        }
}
class ThreadTest
{
        public static void main(String[] args)
        {
                Test t1 = new Test("one---");
                Test t2 = new Test("two+++");
        }
}
回复 使用道具 举报
一个子类继承了某一个父类,当在创建子类的实例时都会去调用父类的构造方法,首先会隐式的调用父类不带参数的构造方法!要想调用带参数的构造方法,必须用supper关键字!
回复 使用道具 举报
Test的父类是Thread呀,super的作用是调用父类的构造函数,在本例中,super(name);调用的是Thread类的Thread(String name);构造函数。
上面代码的意思是在子类Test的构造函数中再调用父类的构造函数,并把参数name传入。
回复 使用道具 举报
给子类初始化的时候必选先给父类的构造方法初始化
super(name);
同时你有重写了父类的构造方法
回复 使用道具 举报
应该在Test的父类Thread中定义了String name 这一属性,Test类本身没有定义;
它要到父类中去找父类中对应的构造函数,这样才能对传入的name进行初始化。
回复 使用道具 举报
super(name)是调用父类的构造函数给子类成员初始化用的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马