java this 关键字问题

public class HelloA {  
    public static void main(String[] args) {  
     new B().print();  
    }  
}  

class B extends A{  
    private String s = "B" ;  
    public void print() {  
        super.print();  
    }  
    public String test(){  
        return "test_B";  
    }  
}  

class A {  
    private String s = "A" ;  
    public void print() {  
        System.out.println(this.s);  
        System.out.println( this.test());  
    }  
    public String test() {  
        return "test_A";  
    }  
}  

    如上,为什么打印出来是 A  test_B ?
    如果把classA的test方法换成private,打印出来的就是 A  test_A
    不论怎样,this代表的不是classB 吗 ? 为什么私有化test方法后就不会调用classB的test方法了呢 ?

1、在类的方法定义中使用的this关键字代表使用该方法的对象的引用。
2、当必须指出当前使用方法的对象是谁时要使用this。
3、有时使用this可以处理方法中成员变量和参数重名的情况。
4、this可以看做是一个变量,它的值是当前对象的引用。
 
public class Leaf
{
int i=0;
Leaf(int i){this.i=i;}
Leaf increment(......
答案就在这里:JAVA关键字this
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

1*this 在这里好像是指A的吧。
2*继承的话,好像B会重载A的方法test
3*private是私有的,除了这个类别的用不了…

上面都是猜的,不确定图片说明

A的print在写方法的时候就是this,当时指的就是A,不是B.

后面是那个方法被B重构了,如果改为私有,就没有被重构嘛。

这个就是多态的用法啊。如果把基类方法的访问权限改成比子类的更严格的话,那么这个时候就失去了多态。。

打断点你发现this是指向的B,但是并不是A类里面的this

首先,你定义的A,B都有相同的私有成员变量s,当A的print()调用this.s的时候,你在此处打断点可以看到this是B类型,但是它同时保留了两个成员变量
s(A),s(B),由于是在A的方法中,A、B中都有成员变量,但是是在A的方法中,所以A中只能访问到s(A)。
其次,this.test()方法,由于this类型指向的是B,所以调用的是B的test方法。
结论就是:当子类和父类有相同名称的私有成员时,创建的子类的实例会同时具有两个同名变量,父类的方法只能访问到父类的成员变量的。
图片说明