黑马程序员技术交流社区
标题:
此处为什么用super()?
[打印本页]
作者:
李节起
时间:
2012-4-9 13:39
标题:
此处为什么用super()?
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:
作者:
蒙武辉
时间:
2012-4-9 13:43
super(name)是调用父类的构造函数给子类成员初始化用的。
作者:
newlaw2013
时间:
2012-4-9 13:53
应该在Test的父类Thread中定义了String name 这一属性,Test类本身没有定义;
它要到父类中去找父类中对应的构造函数,这样才能对传入的name进行初始化。
作者:
黄或俊
时间:
2012-4-9 13:55
给子类初始化的时候必选先给父类的构造方法初始化
super(name);
同时你有重写了父类的构造方法
作者:
孙利川
时间:
2012-4-9 14:00
Test的父类是Thread呀,super的作用是调用父类的构造函数,在本例中,super(name);调用的是Thread类的Thread(String name);构造函数。
上面代码的意思是在子类Test的构造函数中再调用父类的构造函数,并把参数name传入。
作者:
黑马-刘昌文
时间:
2012-4-9 14:35
一个子类继承了某一个父类,当在创建子类的实例时都会去调用父类的构造方法,首先会隐式的调用父类不带参数的构造方法!要想调用带参数的构造方法,必须用supper关键字!
作者:
张昊镭
时间:
2012-4-9 15:50
这个问题确实非常蛋疼,在第九天讲自定义异常类的时候就会讲到,结果昨天想了半天还是没搞懂,我觉得我可
能到现在还没完全弄懂,先说下我的理解,错误的地方,烦请纠正.
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+++");
}
}
作者:
pray
时间:
2014-4-26 08:05
初来乍到,请多多关照。。。
作者:
詹绪长
时间:
2014-5-9 12:23
子类没有的方法而他的父类(super)里边有的话,可以通过(super)来调用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2