extends 用於繼承單一類別,建立「是一種」關係;implements 則用於實作介面,屬於契約式設計。介面的引入解決了 Java 不支援多重繼承的限制——介面中僅宣告方法簽名,實作細節交由具體類別完成。值得注意的是,介面之間也可透過 extends 形成單繼承體系。
Java 明確拒絕 C++ 風格的顯式多重繼承,因為會導致子類別被迫呼叫虛擬基底類別建構子,違反封裝原則。取而代之的是 interface + implements 機制,讓類別可實作多個介面,達到「多型」而非「多重繼承」的設計目標。
被標記為 abstract 的方法無需提供方法本體,強制子類別實作;包含抽象方法的類別必須宣告為抽象類別,且無法實例化,但可定義建構子供子類別呼叫。
public:任何類別可存取protected:同類別與子類別可存取private:僅限類別內部類別僅能使用 public 或預設修飾符。
Override(覆寫):發生於父子類別之間,方法名稱、參數列表完全相同,體現多型。
Overload(多載):發生於同一類別內(或父子類別間),方法名稱相同但參數型別/個數不同,屬於靜態綁定。
super(...) 執行父類別建構子this(...),同樣必須置於首行Java 無析構函數,void finalize() 在 GC 回收前被呼叫,但回收時機不可預測,實務上極少使用。
父類別參照強轉為子類別時,若實際物件非目標型別,會拋出 ClassCastException。安全做法是先用 instanceof 判斷:
if (a instanceof B) {
B b = (B) a;
// 安全使用 b
}
Java 採用「傳值呼叫」。方法內將參考變數重新指向新物件(a = new A()),不會影響外部原始物件;基本型別同理。正確做法是直接操作物件內部狀態(a.setAttr(...))。
陣列長度固定(int[] arr = new int[n]),需動態增刪請使用 List:
ArrayList:陣列實作,隨機存取快LinkedList:鏈結串列實作,插入刪除快,亦可作佇列/堆疊HashSet:雜湊表,無序、高效去重TreeSet:紅黑樹,元素自動排序,需實作 Comparable 或提供 ComparatorMap 儲存 key-value 對,透過鍵快速存取值。get() 回傳 Object 需強制轉型。
Iterator 遍歷 Collection/MapArrays.sort()Comparator 配合 Arrays.sort()java.util.Random 產生隨機數equals() 或 equalsIgnoreCase(),== 比較的是參考位址而非內容