溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java中如何實(shí)現(xiàn)方法的重寫(xiě)與成員變量的隱藏

發(fā)布時(shí)間:2021-08-13 16:21:56 來(lái)源:億速云 閱讀:215 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)Java中如何實(shí)現(xiàn)方法的重寫(xiě)與成員變量的隱藏,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

在討論這個(gè)問(wèn)題之前,我們看一段特別特別簡(jiǎn)單的代碼,請(qǐng)問(wèn)一下方法的數(shù)據(jù)結(jié)果是什么?

/** 
 * @author Hollis 17/9/27. 
 */ public class FieldOverriding { 
 public static void main(String[] args) { 
 Sub c1 = new Sub(); 
 System.out.println(" c1.s : " + c1.s); 
 System.out.println(" c1.say : " + c1.say()); 
 Super c2 = new Sub(); 
 System.out.println(" c2.s : " + c2.s); 
 System.out.println(" c2.say : " + c2.say()); 
 } 
} 
class Super { 
 String s = "Super"; 
 String say(){ 
 return "hello Super"; 
 } 
} 
class Sub extends Super { 
 String s = "Sub"; 
 String say(){ 
 return "hello Sub"; 
 } 
}

輸出結(jié)果:

 c1.s : Sub 
 c1.say : hello Sub 
 c2.s : Super 
 c2.say : hello Sub

和你想的一樣嗎,如果一樣的話,那就不用繼續(xù)往下看了。因?yàn)檫@個(gè)本來(lái)就不難,知道了就行。

Java中的重寫(xiě)

在深入理解Java中的重寫(xiě)和重載中我們介紹過(guò):

在Java的子類(lèi)與父類(lèi)中有兩個(gè)名稱(chēng)、參數(shù)列表都相同的方法的情況。由于他們具有相同的方法簽名,所以子類(lèi)中的新方法將覆蓋父類(lèi)中原有的方法。

正式因?yàn)镴ava在繼承中有方法的重寫(xiě),所以,這也體現(xiàn)了Java的動(dòng)態(tài)多態(tài)性。

成員變量在Java中能夠被重寫(xiě)么?

上面的Java的重寫(xiě)介紹中明確的說(shuō)了,重寫(xiě),指的是方法。并沒(méi)有提到成員變量。通過(guò)上面的例子,其實(shí)我們也可以發(fā)現(xiàn),成員變量并沒(méi)有被重寫(xiě)。

所以,Java中,成員變量并不會(huì)被重寫(xiě)。這里就有另外一個(gè)詞:隱藏。

Java中成員變量的隱藏

Java文檔中對(duì)隱藏域的定義:

Within a class, a field that has the same name as a field in the superclass hides the superclass's field, even if their types are different. Within the subclass, the field in the superclass cannot be referenced by its simple name. Instead, the field must be accessed through super. Generally speaking, we don't recommend hiding fields as it makes code difficult to read.

翻譯成中文:

在一個(gè)類(lèi)中,子類(lèi)中的成員變量如果和父類(lèi)中的成員變量同名,那么即使他們類(lèi)型不一樣,只要名字一樣。父類(lèi)中的成員變量都會(huì)被隱藏。在子類(lèi)中,父類(lèi)的成員變量不能被簡(jiǎn)單的用引用來(lái)訪問(wèn)。而是,必須從父類(lèi)的引用獲得父類(lèi)被隱藏的成員變量,一般來(lái)說(shuō),我們不推薦隱藏成員變量,因?yàn)檫@樣會(huì)使代碼變得難以閱讀。

其實(shí),簡(jiǎn)單來(lái)說(shuō),就是子類(lèi)不會(huì)去重寫(xiě)覆蓋父類(lèi)的成員變量,所以成員變量的訪問(wèn)不能像方法一樣使用多態(tài)去訪問(wèn)。

如何訪問(wèn)被隱藏的成員變量

其實(shí),通過(guò)前面的例子,和剛剛關(guān)于成員變量的介紹,其實(shí)你已經(jīng)知道了如何訪問(wèn)被隱藏的成員變量。 就是使用父類(lèi)的引用來(lái)訪問(wèn)成員變量,如Super c2 = new Sub(); System.out.println(" c2.s : " + c2.s);。或者使用System.out.println(((Super)c1).s);。

關(guān)于“Java中如何實(shí)現(xiàn)方法的重寫(xiě)與成員變量的隱藏”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI