公衆方法調用私有方法,被繼承,繼承類有同名私有方法。調用繼承類的公衆方法,調用哪個私有方法?如果是調用公衆方法呢?
其實就是問下面程序的輸出了。
class A{
private void fun_c(){
System.out.println("fun_c A");
}
public void fun_d(){
System.out.println("fun_d A");
}
public void fun(){
fun_c();
fun_d();
}
}
class B extends A{
private void fun_c(){
System.out.println("fun_c B");
}
public void fun_d(){
System.out.println("fun_d B");
}
}
public class Fangfadiaoyong {
public static void main(String[] args) {
B example = new B();
example.fun();
}
}
答案是這樣的
fun_c A
fun_d B
輸出fun_d B我們是很容易理解的,因爲fun_d()在B中被重寫。那調用B類fun()方法時爲什麼是調用了A類中的fun_c()方法,而不是B類中的fun_c()方法呢?
我是這麼理解的。B類繼承A類的fun()方法,JVM先看fun()有沒有被重寫。沒有,B類中實際保存的是A類的fun()方法。對A類的fun()方法來說,B類的私有fun_c()是不可見的。纔出現了B類fun()調用A類fun_c()。
驗證很簡單,將A類fun()在B類中重寫。調用的是B類fun_c()。得到驗證。