黑马程序员技术交流社区
标题:
越学越糊涂,关于getName的问题
[打印本页]
作者:
孙沛
时间:
2012-9-8 19:51
标题:
越学越糊涂,关于getName的问题
越学越糊涂,请教下
class Test extends Thread{
Test(String name){
super(name);//这句话是调用Thread类的构造函数Thread(String name),可是有什么作用呢,为什么要这样呢,下面的this.getName()如何获取到线程的名字呢
}
public void run(){
System.out.println(this.getName());
}
}
class ThreadTest{
public static void main(String[] args){
Test t1 = new Test("111111");
t1.start();
}
}
作者:
霍永刚
时间:
2012-9-8 20:27
本帖最后由 霍永刚 于 2012-9-8 20:50 编辑
class Test extends Thread{
Test(String name){
super(name);//这句话是调用Thread类的构造函数Thread(String name),可是有什么作用呢,为什么要这样呢,下面的this.getName()如何获取到线程的名字呢
(继承Thread类里的name属性;当你传入name值的时候直接写入到父类的name属性里)
}
public void run(){
System.out.println(this.getName());
//这里应该可以获取到名字了
}
}
还有一个方法应该这样写
class Thread(){
private String name; //封装属性值name;
public String getname() {
return name;
}
public void setname(String name) {
this.name= name;
}
public Thread(String name){ //构造函数
this.name=name;
}
}
class ThreadTest{
public static void main(String[] args){
Test t1 = new Test("111111");
t1.run();
}
}
作者:
王宝龙
时间:
2012-9-8 20:32
本帖最后由 王宝龙 于 2012-9-8 20:33 编辑
super(name);//调用父类的构造函数,父类里有个这样的构造函数
Thread
(
String
name)和一个这样的方法String getName(),
子类Test已继承了父类,所以父类的所有
public方法就是自己的了,子类可以完全无条件使用。
这是简单的继承的规则!
class Test extends Thread
{
Test(String name)
{
super(name);//调用父类的构造方法,子类Test已继承了父类所以父类的所有
//public方法就是自己的了子类完全无条件可以用
}
public void run()
{
System.out.println(this.getName());
}
}
class ThreadTest
{
public static void main(String[] args)
{
Test t1 = new Test("111111");
t1.start();
}
}
复制代码
作者:
创出一片辉煌
时间:
2012-9-8 20:35
在Thread内部定义了个 private char name[]; "name"这个参数通过构造方法,传递给init()这个方法,次方发接收到name后通过"this.name = name.toCharArray();"赋值给 name数组,而getName方法返回的正是这个name数组: public final String getName() {
return String.valueOf(name);
}
再说this.getName,this调用方法和super调用方法时是这样的,this是现在本类中找getName这个方法,如果本类没有就会调用父类getName方法,所以最终是调用Thread类的getName方法,super不会在本类中找getname方法,直接调用父类的getName方法
作者:
霍明波
时间:
2012-9-8 21:49
本帖最后由 霍明波 于 2012-9-8 21:56 编辑
class Test extends Thread{
Test(String name){
super(name);//这句话是调用Thread类的构造函数Thread(String name),可是有什么作用呢,为什么要这样呢,下面的this.getName()如何获取到线程的名字呢
}
public void run(){
System.out.println(this.getName());
}
}
class ThreadTest{
public static void main(String[] args){
Test t1 = new Test("111111");
t1.start();
}
}
这里要先明确一点,用到的getName()方法获取名字是父类Thread的方法,而且此方法是final的即不能被复写,所以用Test ti = new Test("11111")构造函数时,需要将参数传到父类(super(name)就是这功能),如果没有传到父类的话,那么父类还是用默认的名字,即你输入的名字不会打出来,因为getName()方法是父类Thread的,只能提取父类中的变量name。就相当于父类有一个变量private String name;如果你不给他输入数据的话,他就是默认的,getName()也只会打印出默认的。
如果你想要在子类自定义一个名字和获取名字的方法也可以,但是没有必要。
作者:
陈振兴
时间:
2012-9-8 22:21
首先讲的就是java 4大机制中的封装:(定理)
(1)任何子类的构造方法都会去调用父类的构造方法
(2)任何类都有构造方法,如果程序员自己不定义,则系统会加上一个默认的构造方法。如果定义了,则系统不会加
(3)任何子类的构造方法的第一行一定式super()或者this();
如果程序员不这样写,则系统会默认的加上super();
this();调用本类其它的构造方法,它出现在构造方法的第一行;
这样就知道你所抛出的第一个疑惑!
然后就是this.getName(),继承父类的构造方法,而java已经将Thread类封装好了,提供的构造方法里就有Thread(String name),
一般情况下我们书写方式是:在这里Thread.currenteThread.getName()==this.getName();会自动调用类中的SetName()、GetName(),这就是我们经常在自定义类里写的这个方法。
首先从封装入手,后面学到的内容大多数就是基于4大机制展开与应用的。
作者:
Tesla时光
时间:
2012-9-9 02:37
class Test extends Thread{
Test(String name){
super(name);
//这句话是调用Thread类的构造函数Thread(String name),没错,也就是将你的命名传递给Thread(String name){this.name=name;}
这也就是说,你把Thread对象里的name成员属性改了,改成了"111111".而同时你也继承了父类的成员变量name.这个name也是"111111".
那么你调用继承父类的方法getName(),所得到name的值是一样的.
}
public void run(){
System.out.println(this.getName());//
正是因为有上面的原因,这里写成Thread.currentThread().getName()也是可以的
}
}
class ThreadTest{
public static void main(String[] args){
Test t1 = new Test("111111");
t1.start();
}
}
作者:
陈俊来
时间:
2012-9-9 15:14
lz,我说简单一点,
class Test extends Thread{
Test(String name){
super(name);//这句话是调用Thread类的构造函数Thread(String name),可是有什么作用呢,为什么要这样呢,下面的this.getName()如何获取到线程的名字呢
}。。。。。。
1、你的Test继承了Thread,目的就是要使用它的的东西 ,super(name) ,可以调用父类的构造函数,直接将name这个值,传入父类的name中,
2、至于this.getName获取到 名字,因Test构造函数永乐super,所以,可以获取到名字,其实这两个问题是同一个问题,希望对你有所帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2