将控制传递给超类时的方法绑定

时间:2018-05-10 23:06:33

标签: java oop

class Base {
    private void func(){ // method overridden if public
        System.out.println("In base func method");         
    };
    public void func2() {
        System.out.println("func2");
        func(); // alternatively, this could be: ((Derived) this).func();
    }
}

class Derived extends Base {
    public void func(){
        System.out.println("In Derived Class func method"); 
    }
}

class Test {
    public static void main(String [] args) {
        Derived d = new Derived();
        d.func2();
    }
}

如上所述,此代码将调用Base类的func(),因为此方法是私有的,并且没有方法覆盖继续。

但是,如果func()的{​​{1}}行更改为func2(),则会调用Derived类的((Derived) this).func()。 据我所知,一旦控件进入Base类的func(),似乎Derived对象被视为Base对象。

我的理解是否正确?在基类的func2()而不是func()而不是public并且发生运行时绑定的情况下,如果有的话,我的理解如何与方法重写相协调? private中对func()的调用是否首先找到基类func2(),然后由于方法覆盖而决定在子类中使用func()?究竟在运行时会发生什么?

0 个答案:

没有答案