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方法。
结论就是:当子类和父类有相同名称的私有成员时,创建的子类的实例会同时具有两个同名变量,父类的方法只能访问到父类的成员变量的。