子类能否访问或覆盖父类的private方法
http://bettereveryday.iteye.com/blog/591771
private關(guān)鍵字的定義是“除了包含該成員的類之外,其他任何類都無法訪問這個成員.”,也就是說只有自己才能直接訪問到private成員,其他任何類,包括子類都無法訪問到這個成員。
?
我們可以來測試一下:
定義兩個類,Parent類和Child類
Parent類中有兩個方法,一個public方法,一個private方法
Child繼承自Parent類
Java代碼 ??從“// child.privateMethod();”行我們可以看出,父類的private方法是無法被子類覆蓋的,因為若能覆蓋,則會像覆蓋public方法一樣,不會出現(xiàn)任何編譯錯誤,而且從錯誤提示可以看出,“The method privateMethod() from the type Parent is not visible”,也就是“父類的privateMethod()方法(對子類而言)是不可見的”,即子類無法訪問父類的private方法。
這個可以從內(nèi)存角度得到比較好的解釋:
我們可以將一個對象的內(nèi)存分為兩部分,一部分繼承自父類對象,簡稱繼承內(nèi)存,一部分是屬于自己的,簡稱自有內(nèi)存,這就好像一個人的財產(chǎn)一樣,一部分是繼承自長輩,一部分靠自己打拼。
父類引用指向子類對象,那么該引用指向的其實只是繼承內(nèi)存,它能調(diào)用的也就這點內(nèi)存,這里面包括父類的成員變量,方法等等,父類引用指向的是一個子類對象,但它調(diào)用的是父類的privateMethod,但private方法是無法在其他對象中訪問到,所以就會產(chǎn)生編譯錯誤。
?
=============================================
http://blog.csdn.net/cdsnmdl/article/details/3968688
1、方法繼承:利用extends關(guān)鍵字一個方法繼承另一個方法,而且只能直接繼承一個類。- 當(dāng)Sub類和Base類在同一個包時Sub類繼承Base類中的public/protected/默認(rèn)級別的變量個方法
- 在不同包時繼承public/protected級別的變量和方法。
- 方法名相同
- 方法的參數(shù)類型,個數(shù)順序至少有一項不同
- 方法的返回類型可以不相同
- 方法的修飾符可以不相同
- main方法也可以被重載
- 子類的方法名稱返回類型及參數(shù)簽名 必須與父類的一致
- 子類方法不能縮小父類方法的訪問權(quán)限
- ?子類方法不能拋出比父類方法更多的異常
- 方法覆蓋只存在于子類和父類之間,同一個類中只能重載
- 父類的靜態(tài)方法不能被子類覆蓋為非靜態(tài)方法
- 子類可以定義于父類的靜態(tài)方法同名的靜態(tài)方法,以便在子類中隱藏父類的靜態(tài)方法(滿足覆蓋約束), ? ?
- ?? ? ? ? ? ?而且Java虛擬機(jī)把靜態(tài)方法和所屬的類綁定,而把實例方法和所屬的實例綁定。
- 父類的非靜態(tài)方法不能被子類覆蓋為靜態(tài)方法
- 父類的私有方法不能被子類覆蓋
- 父類的抽象方法可以被子類通過兩種途徑覆蓋(即實現(xiàn)和覆蓋)(P169)
- 父類的非抽象方法可以被覆蓋為抽象方法
- 父類的成員變量和方法為private使用super訪問編譯出錯
- 在類的構(gòu)造方法種,通過super語句調(diào)用這個類的父類的構(gòu)造方法
- 在子類種訪問父類的被屏蔽的方法和屬性
- 只能在構(gòu)造方法或?qū)嵗椒▋?nèi)使用super關(guān)鍵字,而在靜態(tài)方法和靜態(tài)代碼塊內(nèi)不能使用super
- 對于一個引用類型的變量,Java編譯器按照它的聲明的類型來處理
- 對于一個引用類型的變量,運行時Java虛擬機(jī)按照它的實際引用的對象來處理
- 運行時環(huán)境中,通過引用類型變量來訪問所引用對象的方法和屬性時,Java虛擬機(jī)采用以下綁定規(guī)則
?
- 集成數(shù)的層次不可太多
- 集成數(shù)的上層為抽象層
- 繼承關(guān)系最大的弱點:打破封裝
- 精心設(shè)計專門用于被繼承的類
?
總結(jié)
以上是生活随笔為你收集整理的子类能否访问或覆盖父类的private方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 Jersey 和 Apache T
- 下一篇: REST WebService与SOAP