extends的方法調用

公衆方法調用私有方法,被繼承,繼承類有同名私有方法。調用繼承類的公衆方法,調用哪個私有方法?如果是調用公衆方法呢?
其實就是問下面程序的輸出了。

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()。得到驗證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章