super和this注意事项
class Parent{ public void init(){ System.out.println("1 init parent"); this.demo(); } public void demo() { System.out.println("2 demo parent"); } } class Son extends Parent{ @Override public void init(){ super.init(); System.out.println("3 init son"); } @Override public void demo(){ System.out.println("4 demo son"); } } public class Demos { public static void main(String[] args) { Son son1=new Son(); Parent son2=new Son(); son1.init(); // 1 4 3 父类的this.demo()仍然调用的是子类覆盖的demo() son2.init(); // 1 4 3 }
}
在子类init 方法中调用了父类的init方法,但父类又调用了this.demo(),此时的this指向的是调用者,也就是son,执行的是子类的demo()方法。