public class TestQuestion1 {
public static void main(String[] args) {
new c().visit();
}

}
class b{
int a = 4;
public void v() {
System.out.println(this.a);
System.out.println(this.getClass());
}
}
class c extends b {
int a = 6;
public void visit() {
super.v();
}
}为什么输出会是a 和class c呢?

解决方案 »

  1.   

    http://bbs.csdn.net/topics/390324008
    和楼主的问题类似。
      

  2.   

    在Java中只有new这个关键字可以生成一个新的对象,this引用的就是当前的新对象,正如楼主们所说,两个a变量没有覆盖关系,在内存中会单独开辟变量空间,this.a是引用的父类中的那个a变量。所以最终出现打印的结果
      

  3.   

    this是本类对象的引用,因此this.a返回的是本类的a
    getClass返回的是此 Object 的运行时类。所以返回的是运行的对象c的类。
      

  4.   


    嗯 主要是对getClass没了解  现在能想通了!
      

  5.   

    分开写你就懂了:
     C c = new C();
    c.init();
    super调用父类b,b方法输出初始化好的a的值,定义c的对象类是C,所以输出C
      

  6.   

    类C的visit()方法调用了父类函数,另外你参数a跟父类没关系,方法也没传参