方法重載:Java 對重寫等效方法的限制
Java 禁止類別中存在兩個具有相同擦除的方法,儘管參數不同類型。此限制源自於該語言努力保持與利用原始類型的遺留程式碼的兼容性。
當兩個具有不同參數類型的方法(例如 add(Set
有此限制是為了避免類別使用原始方式從超類別繼承的情況下發生衝突類型。在這種情況下,編譯器必須將原始類型視為與泛型類型等效的重寫,以確保正確的方法重寫。
例如,考慮使用原始型別使用 toList(Collection c) 方法的遺留類別 CollectionConverter。如果您擴展此類並添加新方法 toList(Collection
但是,如果您稍後錯誤地添加第三個方法 toList(集合 c) 到子類,編譯器面臨歧義,因為它無法確定要重寫哪個方法。為了解決這種歧義,Java 針對多個重寫等效方法強制執行規則。
值得注意的是,此限制不是擦除的限制,而是為了支援與現有程式碼的兼容性而做出的設計選擇。透過將泛型新增至方法識別碼中,可以在編譯時確保唯一性,而無需此規則。儘管如此,Java 為了相容性還是保留了這個限制。
以上是為什麼 Java 使用等效方法來限制方法重載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!