Java中的覆蓋和隱藏

2021-06-22 18:00:55 字數 946 閱讀 9542

覆蓋(override):只針對例項方法(不針對靜態方法和成員變數)。在執行時決定呼叫那個方法,是多型性的體現。

注意事項:

父類中的static和final方法不能被覆蓋(子類的例項方法不能覆蓋父類的靜態方法;子類的靜態方法也不能覆蓋父類的例項方法,會編譯時出錯)

函式返回值型別必須與父類相同,但在**中返回時可以是子類型別

子類訪問許可權必須大於等於父類

隱藏(hidden):只針對靜態方法和成員變數,編譯時就能決定,建立的是什麼型別,就呼叫對應的方法。

比如:注意事項:

子類的例項方法不能隱藏父類的靜態方法;子類的靜態方法也不能隱藏父類的例項方法,會編譯時出錯

不論是靜態成員還是例項成員,都能被子類同名的成員變數所隱藏,不管是什麼資料型別;靜態成員變數能隱藏例項成員變數,例項成員變數能隱藏靜態成員變數

同時被final和static修飾的方法,不能隱藏

測試

class parent

void dd()

}class child extends parent

void dd()

}

main函式中的**:

parent test = new child();

test.dd();

test.aa();

new child().dd();

new child().aa();

輸出結果:

child a:4.0

parent aa

child a:4.0

child aa

之上結果可以說明:被申明或者轉換為什麼型別,就呼叫對應型別的方法和成員變數。

JAVA隱藏與覆蓋

如 假設有乙個父類father和乙個子類son。父類有乙個成員變數a 0 有乙個靜態成員變數b 0 有乙個成員方法f,輸出0 有乙個靜態成員方法g,輸出0。子類分別重寫這些變數和方法,只是修改變數的值和方法的輸出,全部改為1.我們再宣告乙個靜態型別是父類,動態型別是子類的引用 father fath...

覆蓋和隱藏

c 中派生類函式遮擋 hide 基類中同名函式的問題是比較令人費解的,有必要詳細說明一下。看看下面一段 class base class derived public base derived pd new derived pd f 10 編譯錯誤 對於這樣一種情況,scott meyers這樣解釋...

JAVA學習筆記 隱藏和覆蓋 續

1 屬性的隱藏 子類中宣告了與父類中相同的成員變數名,則從父類繼承的變數將被隱藏 子類擁有了兩個相同名字的變數,乙個繼承自父類,另乙個由自己宣告 當子類執行繼承自父類的操作時,處理的是繼承自父類的變數,而當子類執行它自己宣告的方法時,所操作的就是它自己宣告的變數 2 如何訪問被隱藏的父類屬性 呼叫從...