Java:`extends Thread` / `implements Runnable`,`synchronized` 方法/塊實現對象鎖(可重入)。無顯式鎖對象(Java 5+ `java.util.concurrent.locks` 补充)。C++:C++11 前無標準線程庫,依賴 pthread/Win32 API。
Java 內部類實例隱式持有外部類實例引用(`OuterClass.this`),可無限制訪問外部成員(含 `private`)。解決回調問題無需指針。C++ 嵌套類無隱式引用,需顯式傳遞 `this` 指針。
因內部類機制,Java 不需要「指向成員的指針」(C++ `&Class::member`)。
Java 編譯器自動決定內聯(JIT 編譯階段)。`final` 方法建議內聯(禁止重寫利於靜態綁定)。C++ `inline` 僅建議編譯器。
public class Foo extends Bar {
public Foo(String msg) { super(msg); }
public void baz(int i) { super.baz(i); }
}
`super` 僅調用直接父類(C++ 可 `Base::method()` 調用任意祖先)。構造器鏈強制 `super()` 首行。
Java 無 `public/private/protected` 繼承區分。重寫方法訪問權限不得縮小(編譯器強制)。C++ 可通過繼承方式改變基類成員可見性。
`interface` 純抽象契約(Java 8+ 允許 `default`/`static` 方法)。`implements` 多實現替代多繼承。`abstract` 類可含實現但單繼承。接口分離「契約」與「實現繼承」。
Java 非靜態方法默認動態綁定(無 `virtual`)。`final` 方法禁用重寫 → 靜態綁定 → 內聯優化。C++ 需顯式 `virtual` 開啟動態綁定,性能敏感處可不加。
Java 單繼承(`extends` 一個類)+ 多實現(`implements` 多接口)。`Object` 為根。C++ 多繼承靈活但複雜(菱形繼承需虛繼承)。
Java:`obj.getClass().getName()`,向下轉型 `(Derived) base` 自動檢查拋 `ClassCastException`。C++:`typeid`,`dynamic_cast`(需 RTTI 支持,虛函數表)。
Java 無析構函數 → `finally` 塊保證清理執行。所有異常繼承 `Throwable`(`Error` + `Exception`)。`try-catch-finally` 結構清晰。
Java `throws` 聲明檢查異常(Checked Exception)編譯期強制處理/傳播。重寫方法異常類型必須兼容(同類或子類)。C++ 異常規範運行期檢查(C++11 棄用 `throw()` 改 `noexcept`)。
Java 無運算符重載。`String` 特殊支持 `+`/`+=` 拼接。C++ 完全支持運算符重載(含 `new`/`delete`/`()`/`[]`/`->` 等)。
Java 參數傳引用(對象引用按值傳遞),無 `const`。需傳值用 `clone()`(淺拷貝問題)。C++ `const` 引用/指針提供只讀保證,支持傳值/傳引用/傳指針多種語義。
本文系統梳理了 Java 與 C++ 在核心語言特性上的根本差異,反映了兩種設計哲學:Java 追求安全、簡單、標準化運行時;C++ 追求零開銷抽象、硬件級控制、泛型編程。理解差異有助於跨語言遷移、技術選型、面試應對。