Java中子類(lèi)繼承父類(lèi)的私有屬性和方法
寫(xiě)在前面:
已經(jīng)正式從事java開(kāi)發(fā)一年了,在寫(xiě)一個(gè)demo的時(shí)候,突然發(fā)現(xiàn)繼承這塊的知識(shí),以前都沒(méi)有注意到這些,原來(lái)自己掌握的很淺薄。
通過(guò)書(shū)本看到子類(lèi)擁有父類(lèi)的所有屬性和方法,于是寫(xiě)程序去驗(yàn)證,發(fā)現(xiàn)父類(lèi)的私有屬性和方法,子類(lèi)是不能訪問(wèn)的,當(dāng)然父類(lèi)的某些私有屬性可以通過(guò)父類(lèi)的非私有方法去訪問(wèn)到,但是私有的方法不能在子類(lèi)中直接訪問(wèn)。于是我認(rèn)為,子類(lèi)不能繼承父類(lèi)私有的屬性和方法;
但是通過(guò)網(wǎng)上查閱,分析了內(nèi)存后,我發(fā)現(xiàn)我是錯(cuò)誤的,在一個(gè)子類(lèi)被創(chuàng)建時(shí),首先會(huì)在內(nèi)存中創(chuàng)建一個(gè)父類(lèi)對(duì)象,然后在父類(lèi)對(duì)象的外部放上子類(lèi)獨(dú)有的屬性,這兩者結(jié)合起來(lái)形成了一個(gè)子類(lèi)的對(duì)象。
所以在java繼承中,子類(lèi)擁有父類(lèi)所有屬性和方法可以這樣理解:
子類(lèi)對(duì)象確實(shí)擁有父類(lèi)對(duì)象中的所有屬性和方法,但是父類(lèi)對(duì)象中的私有屬性和方法,子類(lèi)是無(wú)法訪問(wèn)到的,只是擁有,但不能使用。就像有些東西你肯恩擁有,但是你并不能使用;
所以子類(lèi)對(duì)象時(shí)絕對(duì)大于父類(lèi)對(duì)象的,所謂子類(lèi)對(duì)象只能繼承父類(lèi)非私有的屬性及方法的觀點(diǎn)是錯(cuò)誤的??梢岳^承,只是無(wú)法訪問(wèn)到而已。