為什麼Java 限制存取Super.super.method()
在Java 中,語法super.super.method(); ,儘管存在於許多其他語言中。這個限制源自於Java對封裝的強調,確保子類別不能違反其父類別的行為。
封裝迫使子類別遵守其超類別定義的規則。假設我們有一個類別層次結構,其中包含一個父類別 (Items) 和兩個子類別(RedItems 和 BigRedItems)。 RedItems 強制它所包含的所有項目都必須是紅色的,而 BigRedItems 進一步限制它們必須是大的和紅色的。
在這種情況下,允許 super.super.add();會破壞封裝。子類別(NaughtyItems) 可以透過直接呼叫super.super.add() 來繞過RedItems 的紅色項限制;:
public class NaughtyItems extends RedItems { @Override public void add(Item item) { // I don't care if it's red or not. Take that, RedItems! super.super.add(item); } }
這會違反RedItems 中的不變量,允許將任何顏色的項添加到NaughtyItems .
本質上是super.super.method();允許子類別繞過多個父類別的行為,破壞繼承的封裝原則。 Java 禁止這樣做,以確保子類別尊重其父類別的行為並維護結構良好的類別層次結構。
以上是為什麼Java不允許`super.super.method()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!