日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

子类能否访问或覆盖父类的private方法

發布時間:2024/4/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 子类能否访问或覆盖父类的private方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://bettereveryday.iteye.com/blog/591771

private關鍵字的定義是“除了包含該成員的類之外,其他任何類都無法訪問這個成員.”,也就是說只有自己才能直接訪問到private成員,其他任何類,包括子類都無法訪問到這個成員。

?

我們可以來測試一下:

定義兩個類,Parent類和Child類

Parent類中有兩個方法,一個public方法,一個private方法

Child繼承自Parent類

Java代碼 ?
  • public?class?Parent?{ ??
  • ???? ??
  • ????public?void?publicMethod(){ ??
  • ????????System.out.println("hello?parent?public?method"); ??
  • ????} ??
  • ????private?void?privateMethod(){ ??
  • ????????System.out.println("hello?parent?private?method"); ??
  • ????} ??
  • } ??
  • ??
  • public?class?Child?extends?Parent{ ??
  • ???? ??
  • ????public?void?publicMethod(){ ??
  • ????????System.out.println("hello?child?public?method"); ??
  • ????} ??
  • ????private?void?privateMethod(){ ??
  • ????????System.out.println("hello?child?private?method"); ??
  • ????} ??
  • ???? ??
  • ????public?static?void?main(String?args[]){ ??
  • ????????Parent?child?=?new?Child(); ??
  • ????????child.publicMethod(); ??
  • //??????child.privateMethod();?//若不注釋該行代碼,則會出現編譯錯誤:“The?method?privateMethod()?from?the?type?Parent?is?not?visible” ??
  • ????} ??
  • }??
  • public class Parent {public void publicMethod(){System.out.println("hello parent public method");}private void privateMethod(){System.out.println("hello parent private method");} }public class Child extends Parent{public void publicMethod(){System.out.println("hello child public method");}private void privateMethod(){System.out.println("hello child private method");}public static void main(String args[]){Parent child = new Child();child.publicMethod(); // child.privateMethod(); //若不注釋該行代碼,則會出現編譯錯誤:“The method privateMethod() from the type Parent is not visible”} }

    ?從“// child.privateMethod();”行我們可以看出,父類的private方法是無法被子類覆蓋的,因為若能覆蓋,則會像覆蓋public方法一樣,不會出現任何編譯錯誤,而且從錯誤提示可以看出,“The method privateMethod() from the type Parent is not visible”,也就是“父類的privateMethod()方法(對子類而言)是不可見的”,即子類無法訪問父類的private方法。

    這個可以從內存角度得到比較好的解釋:

    我們可以將一個對象的內存分為兩部分,一部分繼承自父類對象,簡稱繼承內存,一部分是屬于自己的,簡稱自有內存,這就好像一個人的財產一樣,一部分是繼承自長輩,一部分靠自己打拼。

    父類引用指向子類對象,那么該引用指向的其實只是繼承內存,它能調用的也就這點內存,這里面包括父類的成員變量,方法等等,父類引用指向的是一個子類對象,但它調用的是父類的privateMethod,但private方法是無法在其他對象中訪問到,所以就會產生編譯錯誤。

    ?

    =============================================

    http://blog.csdn.net/cdsnmdl/article/details/3968688

    1、方法繼承:利用extends關鍵字一個方法繼承另一個方法,而且只能直接繼承一個類。
    • 當Sub類和Base類在同一個包時Sub類繼承Base類中的public/protected/默認級別的變量個方法
    • 在不同包時繼承public/protected級別的變量和方法。
    2、方法重載:如果有兩個方法的方法名相同,但參數不一致,哪么可以說一個方法是另一個方法的重載。
    • 方法名相同
    • 方法的參數類型,個數順序至少有一項不同
    • 方法的返回類型可以不相同
    • 方法的修飾符可以不相同
    • main方法也可以被重載
    3、方法覆蓋:如果在子類中定義一個方法,其名稱、返回類型及參數簽名正好與父類中某個方法的名稱、返回類型及參數簽名相匹配,那么可以說,子類的方法覆蓋了父類的方法。
    • 子類的方法名稱返回類型及參數簽名 必須與父類的一致
    • 子類方法不能縮小父類方法的訪問權限
    • ?子類方法不能拋出比父類方法更多的異常
    • 方法覆蓋只存在于子類和父類之間,同一個類中只能重載
    • 父類的靜態方法不能被子類覆蓋為非靜態方法
    • 子類可以定義于父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法(滿足覆蓋約束), ? ?
    • ?? ? ? ? ? ?而且Java虛擬機把靜態方法和所屬的類綁定,而把實例方法和所屬的實例綁定。
    • 父類的非靜態方法不能被子類覆蓋為靜態方法
    • 父類的私有方法不能被子類覆蓋
    • 父類的抽象方法可以被子類通過兩種途徑覆蓋(即實現和覆蓋)(P169)
    • 父類的非抽象方法可以被覆蓋為抽象方法
    4、Super關鍵字:super和this關鍵字都可以用來覆蓋Java語言的默認作用域,使被屏蔽的方法或變量變為可見(三種情況下的不可見P171)。
    • 父類的成員變量和方法為private使用super訪問編譯出錯
    • 在類的構造方法種,通過super語句調用這個類的父類的構造方法
    • 在子類種訪問父類的被屏蔽的方法和屬性
    • 只能在構造方法或實例方法內使用super關鍵字,而在靜態方法和靜態代碼塊內不能使用super
    5、多態:
    • 對于一個引用類型的變量,Java編譯器按照它的聲明的類型來處理
    • 對于一個引用類型的變量,運行時Java虛擬機按照它的實際引用的對象來處理
    • 運行時環境中,通過引用類型變量來訪問所引用對象的方法和屬性時,Java虛擬機采用以下綁定規則
    1)實例方法與引用變量實際引用的對象的方法綁定,屬于動態綁定 2)靜態方法與引用變量所聲明的類型的方法綁定,屬于靜態綁定 3)成員變量(包括靜態和實例變量)與引用變量所聲明的類型的成員變量綁定,屬于靜態綁定?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


    ?

    6、繼承的利弊和使用原則:
    • 集成數的層次不可太多
    • 集成數的上層為抽象層
    (1)定義了下層子類都用友的相同屬性和方法,并且盡可能默認實現,從而提高重用性 (2)代表系統的接口,描述系統所能提供的服務
    • 繼承關系最大的弱點:打破封裝
    • 精心設計專門用于被繼承的類
    (1)對這些類必須提供良好的文檔說明 (2)盡可能的封裝父類的實現細節,把代表時間細節的屬性和方法定義為private類型 (3)如果某些實現細節必須被子類訪問,定義為protected類型 (4)把不允許子類覆蓋的方法定義為final類型 (5)父類的構造方法不允許調用可被子類覆蓋的方法 (6)如果某些類不是專門為了繼承而設計,那么隨意繼承它是不安全的

    ?

    總結

    以上是生活随笔為你收集整理的子类能否访问或覆盖父类的private方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。