這兩天學了多態,自然就牽涉到了方法的重寫。在筆者瞎用程式碼折騰的過程中,發現報錯類型提到了「This static method cannot hide the instance method from Fu」(如下圖),於是了解到除了覆蓋(重寫)外還有隱藏這一回事,各種查資料,終於找到了一個比較詳細的文章,解決了我不少的疑惑。轉發下,以後可能還少不了回來來看。
1、編譯時類型和執行時間類型
Java的參考變數有兩個類型,一個是編譯時類型,一個是運行時類型
編譯時類型:由宣告該變數時使用的類型決定
執行階段類型:由該變數指向的物件類型決定
如果編譯時類型和執行時間類型不一致,會出現所謂的多態。因為子類其實是一種特殊的父類,因此java允許把一個子類物件直接賦值給一個父類引用變量,無須任何類型轉換,或者被稱為向上轉型,由系統自動完成。
如 Father f = new Son(); Son是Father的子類別
引用變數f就會出現編譯時類型和執行時類型不一致的情況編譯時是Father類型的執行時是Son類型的
當變數的編譯時類型和執行時間類型不一致時,透過變數存取它所引用的物件的實例時,該實例變數的值由宣告該變數的型別決定。
透過變數存取它所引用的物件的方法時,該方法的行為由所引用的物件實際類型決定。
2、隱藏與覆寫
覆寫:子類別重寫父類別的方法,要求方法名稱和參數型別完全一樣(參數不能是子類別),傳回值和異常比父類別小或相同(即為父類別的子類別),存取修飾符比父類別大或相同。
覆寫是實例方法的
方法不能交叉覆寫:子類別實例方法不能覆寫父類別的靜態方法;
子類別的靜態方法也無法覆寫父類別的實例方法(編譯時報錯誤)
隱藏:父類別和子類別擁有相同名字的屬性或方法( 方法隱藏只有一種形式,就是父類別和子類別存在相同的靜態方法)時,父類別的同名的屬性或方法形式上不見了,實際上是還是存在的。
隱藏是對於靜態方法和成員變數(靜態變數和實例變數)而言的
(1)當發生隱藏的時候,宣告類型是什麼類,就調用對應類別的屬性或方法,而不會發生動態綁定
(2) 屬性只能被隱藏,不能覆寫
(3)變數可以交叉隱藏:子類別實例變數/靜態變數可以隱藏父類別的實例/靜態變數
3、隱藏和覆寫的差異
(1)被隱藏的屬性,在子類別被強制轉換成父類別後,存取的是父類別中的屬性
在無強制轉換時子類別要存取父類別的屬性使用super關鍵字
(2)被覆寫的方法,子類別強制轉換成父類別後,呼叫的還是子類別本身的方法
子類別要是想要存取父類別的方法,可以使用super關鍵字
相關文章:
#PHP和JAVA中的重載(overload)和覆蓋(override) 介紹
以上是Java中的隱藏與覆蓋的概述及其之間的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。