在面向對象程式設計(OOP)領域,關於「所有類別是否應繼承自單一基底類別」的爭論由來已久。C++ 讓這個問題浮上檯面,而 Java 給出的答案非常明確:是。在 Java 中,這個終極基底類別名為 Object,所有類別皆隱式或顯式繼承自它。這種「單根結構」帶來了諸多優勢。
單根結構確保所有物件擁有共同介面,意味著它們屬於同一基礎類型。相較之下,C++ 允許類別獨立存在,雖然這對向後相容 C 程式碼有利,但若要進行純粹的 OOP 設計,開發者必須自行建構類似結構,並整合各種不相容的類別庫,付出額外努力。對於初學者,Java 內建的單根結構顯然更省事、更直觀。
所有 Java 物件自動擁有 Object 定義的基本方法(如 toString()、equals()、hashCode() 等),系統可對任意物件執行通用操作,極大簡化參數傳遞與集合處理。
單根結構配合堆積區物件配置,讓垃圾收集器(GC)能統一追蹤、回收所有物件。GC 所需的中繼資料可直接置於 Object 中,無需複雜的控制代碼。若無單根結構(如 C++ 的指標操作),實作 GC 將面臨極大困難。
所有物件攜帶型別資訊,絕不會出現「無法判斷物件型別」的情況。這對例外處理、反射、序列化等系統級操作至關重要,也賦予程式設計更大彈性。
C++ 早期權衡「效率與控制」後決定放棄單根結構,主因在於:
Java 作為全新設計的語言,無需背負歷史包袱,自然採納了單根結構,與多數現代 OOP 語言(Smalltalk、C#、Python 等)保持一致。
Java 的單根結構不只是語法規定,更是語言設計哲學的體現:統一型別系統、簡化記憶體管理、支援動態特性。這讓開發者能專注於領域問題,而非底層機制。