繼承應該是擁有且可訪問

林冲;發表於2024-05-26

在學習《Java核心技術卷1》的繼承章節中,在p159有一句註釋:“宣告為私有的類成員不會被這個類的子類繼承”。

用Manager類繼承Employee類這個例子來解釋,學者以為:“子類Manger類擁有父類的私有欄位和方法卻無法訪問和呼叫,這不能說子類繼承了這些欄位與方法,這是僅存在於子類擁有的層面(體現在記憶體上可能是會為這些欄位開闢空間但不可直接訪問)。”

那如果我在子類中希望訪問擁有的超類的方法,那將用super這個特殊的關鍵字來給編譯器指示呼叫超類的方法。它的用法幾乎和this一樣,但是卻和this有著本質的差別,this在類的方法中是一個隱式引數,它用於引用當前呼叫方法的物件(把這個物件引用複製一份)。而super僅僅是指示編譯器呼叫超類的方法。

super關鍵字還有一個重要的功能。在構造子類物件時,使用構造器是必然的。那麼在子類中那些不可訪問的欄位怎麼訪問呢?我們可以用在子類構造器的第一行中使用 super(可選引數);語句來進行初始化。然後對子類中特有的欄位進行初始化。這樣子類就可以成功的構造了。

先寫到這裡,有誤的部分還請不吝賜教

相關文章