Java中的隱藏與覆蓋的概述及其之間的區別
這兩天學了多態,自然就牽涉到了方法的重寫。在筆者瞎用程式碼折騰的過程中,發現報錯類型提到了「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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
