由于这个地方我有点乱,所以记录一下。
public class NotOverriding extends Base{
private int i=2;
public static void main(String[] args){
NotOverriding no=new NotOverriding();
no.increase();
System.out.println(no.i);
System.out.println(no.getI());
}
}
class Base{
private int i=100;
public void increase(){
this.i++;
}
public int getI(){
return this.i;
}
}
输出结果:
2
101
原因:当有类的继承时,父类会先检查子类有无重写本类方法,当子类重写父类方法,父类会动态绑定实现多态。而当子类没有重写父类方法时,便会调用父类的原方法,而此时方法里的this则是指父类本身,若此时在这个原方法内又调用一个子类重写了的方法,则又会动态绑定实现子类的方法,此时则指向子类。
public class NotOverriding extends Base{
private int i=2;
public void decline() {
this.i--;
}
public int getI(){
return this.i;
}
public int getSuperI() {
return super.getI();
}
public static void m