2 u013914880 u013914880 于 2014.12.10 21:52 提问

关于this指针的一些问题

//父类
public class BaseClass {
private String a="1";

public BaseClass(String a){
    System.out.println(this.a);    //这两个this分别指向哪个对象
    this.show();
}

public void show(){
    System.out.println("1");
}

}

//子类
public class SubClass extends BaseClass {

public SubClass(String a) {
    super(a);
}

public void show(){
    System.out.println("2");
}

}

//测试
public class Test {

public static void main(String[] args) {
    BaseClass b=new SubClass("a");
    b.show();
}

}

问题:baseClass中的两个this分别指向哪个对象

4个回答

guwei4037
guwei4037   Ds   Rxr 2014.12.10 22:03

this就是代表当前类本身,所以this.a就是String变量("1"),this.show()就是当前类的show方法。
具体跟super有什么异同,可以参考:http://blog.csdn.net/anmei2010/article/details/4093118

u013914880
u013914880 还是上面的,打印this.getClass.getName();是subClass,我在考虑是不是编译时和运行时this会动态变化,正在找运行时多态的资料
大约 3 年之前 回复
lxq_xsyu
lxq_xsyu   Rxr 2014.12.11 09:45

那两个this指向的是baseClass对象本身(this其实就是存放的对象本身的地址),super是父类的指针。

u013914880
u013914880 public class BaseClass { private String a="1"; public BaseClass(String a){ System.out.println(this.a); this.show(); System.out.println(this.getClass().getName()); } public void show(){ System.out.println("1"); } }
大约 3 年之前 回复
u013914880
u013914880 但this调用show方法是subClass的,这是覆盖,但在baseClass构造中打印的this.getClass.getName又是subClass的
大约 3 年之前 回复
u013914880
u013914880 但this调用show方法是subClass的,这是覆盖,但在baseClass构造中打印的this.getClass.getName又是subClass的
大约 3 年之前 回复
blogtjf
blogtjf   2014.12.11 14:05

根据BaseClass b=new SubClass("a");两个this都是指向 new SubClass的内存地址空间

u013914880
u013914880 那为什么this还能访问baseClass的private变量a呢
大约 3 年之前 回复
sunbo624
sunbo624   2014.12.12 17:18

this永远是指向自己

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!