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()方法。

原文地址:https://www.cnblogs.com/mryangbo/p/10853714.html