關於java中的繼承

来源:https://www.cnblogs.com/wujianwu/archive/2019/06/23/11074924.html
-Advertisement-
Play Games

我們都知道Java中的繼承是復用代碼、擴展子類的一種方式,繼承使得Java中重覆的代碼能夠被提取出來供子類共用,對於Java程式的性能以及修改和擴展有很大的意義,所以這是一個非常重要的知識點。 那麼對於繼承的知識點,你真的都瞭解了嗎? 首先,我們都知道子類繼承父類,就能直接訪問父類的公共屬性以及受保 ...


我們都知道Java中的繼承是復用代碼、擴展子類的一種方式,繼承使得Java中重覆的代碼能夠被提取出來供子類共用,對於Java程式的性能以及修改和擴展有很大的意義,所以這是一個非常重要的知識點。

那麼對於繼承的知識點,你真的都瞭解了嗎?

首先,我們都知道子類繼承父類,就能直接訪問父類的公共屬性以及受保護屬性(public和protected),同時也能直接訪問父類的公共方法以及受保護方法;其次,對於父類的私有屬性,子類並不能直接訪問,但是可以通過父類提供的getter和setter方法進行訪問,而父類的私有方法,子類無法直接訪問;還有,對於父類的包訪問許可權屬性和方法(default),如果子類和父類在同一個包下,子類可以繼承並且直接訪問到,如果二者不在同一個包下,則子類無法直接訪問到這些方法和屬性,但是同樣的可以通過父類的getter和setter方法去訪問這些屬性;最後一點,我們很多人其實都有疑問,子類繼承父類,不是應該繼承了父類的所有東西嗎,為什麼訪問不到那些私有屬性?其實這裡要從記憶體分析來看,當我們要創建一個子類的對象時,Java虛擬機會先幫我們生成對應的父類對象,因為我們都知道,在子類的構造方法中中,首行代碼必須是父類構造方法的調用,即通過super關鍵字來調用,如果不寫,則虛擬機會自動幫我們加入super()(前提是父類有無參構造方法),如果父類沒有無參構造方法而有有參構造方法,那麼子類的構造方法必須顯性的調用父類的構造方法,否則會報錯。通過這一點我們就知道在創建子類對象的時候,Java虛擬機是先創建父類的對象,然後在這個父類對象的基礎上加上子類特有的方法和屬性,從而創建出子類對象,因此從這裡我們可以得知,子類是擁有父類的所有屬性和方法的,但是擁有不代表能夠訪問!!!父類私有的方法和對象是子類無法直接訪問的,子類僅僅是擁有但訪問不到!

這裡補充一下特殊的情況,就是父類中的final屬性和方法以及static屬性和方法子類是能夠繼承並直接訪問的,但是final的屬性子類無法修改,final的方法子類無法重寫,說明final修飾的方法並不具備動態綁定;而static的屬性和方法會存在隱藏現象,即當子類中出現與父類static變數或者方法同名的變數或者方法時,子類的成員變數和靜態方法會被隱藏,如:父類中有public static int nun = 1,而子類中有public static int num = 2,這時候用向上轉型的對象(比如Father father = new Son(),其中Father是父類,Son是子類)去輸出num屬性會發現輸出為1!static方法的隱藏理論同屬性一致。如果你想調用子類的static方法和屬性,你需要定義明確子類(如Son son = new Son())的對象去調用,從這裡看出static方法和屬性也不支持動態綁定!所以子類並不能重寫父類的static方法。

以上是我個人對Java繼承一些見解,如果有補充或者修改的地方請在評論區指出來,謝謝!

知識點擴展:Java中的動態綁定,是實現多態的本質,它只針對普通方法,而且僅僅是方法,不包括成員變數那些!所以說如果你用一個向上轉型的父類對象去調用父類對象中的非final、非static屬性,即使它對應的子類中有一樣的屬性,最終輸出還是父類對象的屬性!最後補充一點,Java中除了final、static、private修飾的方法以及構造器(構造器預設為static)為靜態綁定之外,其他方法皆為動態綁定。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Collection介面中的常用方法: * 所有的子類子介面都是具有的 * 集合的方法:增刪改查 * * public boolean add(E e);//添加元素 返回值表示是否添加成功 * public boolean remove(Object o);//刪除元素,返回值表示是否刪除成功 * ...
  • 文章首發: "進程知多少?" @[toc] Java 多線程系列文章第 1 篇 要講線程,一般都得講一講進程,進程是何方神聖呢?下麵來簡單介紹一下。 先通過任務管理器看看 Windows 系統下的進程。 從圖片來看,每一個進程都占有 CPU、記憶體、磁碟、網路等資源。 站在操作系統的角度,進程是分配資 ...
  • 到現在,我們已經完成了POS平臺和前端的網路集成。不過,還是那句話:平臺系統的網路安全是至關重要的。前一篇博客里我們嘗試實現了gRPC ssl/tls網路連接,但測試時用的證書如何產生始終沒有搞清楚。現在akka-http開發的ws同樣面臨HTTPS的設置和使用問題。所以,特別抽出這篇博文討論一下數 ...
  • 本文介紹簡單介紹socket的常用函數,並以python-kafka中的源碼socketpair為例,來講解python socket的運用 ...
  • static是java中很常用的一個關鍵字,使用場景也很多,本文主要介紹了它的五種用法,static變數,static方法,static代碼塊,static內部類,static包內導入,在一定環境下使用,可以提高程式的運行性能,優化程式的結構 ...
  • 所屬網站分類: 資源下載 > python視頻教程 作者:外星人入侵 鏈接: http://www.pythonheidong.com/blog/article/435/ 來源:python黑洞網 www.pythonheidong.com python入門教程-1-Python編程語言歷史及特性. ...
  • 高考完後這麼就才想起這系列教程,實在抱歉,現在該來繼續教程了。 本節利用前面所學知識,來完成一個小工具——文本編輯器! ...
  • 1.一維數組的聲明與初始化 正確的方式: 錯誤的方式 2.一維數組元素的引用:通過角標的方式調用。 3.數組的屬性:length 說明: 4.一維數組的遍歷 5.一維數組元素的預設初始化值 6.一維數組的記憶體解析 : ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...