首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 多態機制深度解析:向上轉型後為何調用子類覆寫方法

     編輯:程式設計綜合問答

代碼復現

class Father {
    String fs = "new father";
    public void say() { System.out.println("father say()"); }
}
class Son extends Father {
    public Son() { fs = "new son"; }
    @Override
    public void say() { System.out.println("son say()"); }
}
public class Test {
    public static void main(String[] args) {
        Father ff = new Son(); // 向上轉型
        ff.say(); // 輸出 "son say()"
    }
}

核心原理:動態綁定

Java 中非靜態方法調用採用動態綁定(晚綁定):

  1. 編譯期:檢查 Father 類是否有 say() 方法,通過編譯。
  2. 運行期:JVM 根據對象實際類型(Son)在方法表中查找 say(),發現 Son 覆寫了該方法,調用 Son.say()。

關鍵概念區分

概念說明
向上轉型引用類型變為父類,只能調用父類聲明的方法(編譯期約束)。
動態綁定運行時根據實例類型決定調用哪個覆寫方法(運行期行為)。
字段訪問無多態:ff.fs 訪問的是 Father.fs(編譯期綁定)。

驗證字段無多態

System.out.println(ff.fs); // 輸出 "new father"(父類字段)

總結

向上轉型後,方法調用看對象實際類型(多態),字段訪問看引用聲明類型(靜態綁定)。這是 Java 設計的核心,保證了「子類可以替換父類」的里氏替換原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved