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()
?究竟在运行时会发生什么?