java文件讀取到內(nèi)存中 Java中子類能夠繼承父類的private屬性或方法嗎?
Java中子類能夠繼承父類的private屬性或方法嗎?子類繼承父類,子類擁有父類的所有屬性和方法。對(duì)于程序驗(yàn)證,不能直接訪問父類的私有屬性和方法子類。當(dāng)然,私有屬性可以通過公共修改的getter和s
Java中子類能夠繼承父類的private屬性或方法嗎?
子類繼承父類,子類擁有父類的所有屬性和方法。
對(duì)于程序驗(yàn)證,不能直接訪問父類的私有屬性和方法子類。當(dāng)然,私有屬性可以通過公共修改的getter和setter方法訪問,但是私有方法不能
假設(shè):子類不能繼承父類的私有屬性和方法
那么:分析內(nèi)存后,會(huì)發(fā)現(xiàn)子類實(shí)例化時(shí),默認(rèn)情況下,將調(diào)用父類的構(gòu)造方法來初始化父類,即在內(nèi)存中創(chuàng)建父類對(duì)象,然后將子類的唯一屬性放在子類的父類對(duì)象的外部。
所以:子類繼承父類的所有屬性和方法是正確的,或者子類擁有父類的所有屬性和方法,但是子類不能直接訪問父類的私有屬性和方法。也就是說,它是擁有的,但沒有使用。
JAVA中繼承與組合的區(qū)別是什么?
1. 組合(has-a)關(guān)系可以顯式地獲得包含類的對(duì)象(在繼承中稱為父類),而繼承(is-a)是隱式地獲得父類的對(duì)象。包含的類對(duì)應(yīng)于父類,而組合的外部類對(duì)應(yīng)于子類。
2. 組合關(guān)系在運(yùn)行時(shí)決定,繼承關(guān)系在編譯時(shí)決定。
3. 復(fù)合是復(fù)合類和包含類之間的松耦合關(guān)系,繼承是父類和子類之間的緊耦合關(guān)系。
4. 選擇使用組合關(guān)系時(shí),外部類的對(duì)象包含在組合類中,組合類可以調(diào)用外部類的必要方法。使用繼承關(guān)系時(shí),父類的所有方法和變量都被子類無條件繼承,不能選擇子類。
5. 最重要的一點(diǎn)是,當(dāng)使用繼承關(guān)系時(shí),可以實(shí)現(xiàn)類型回溯,即使用父類變量引用子類對(duì)象。通過這種方式,多態(tài)性可以實(shí)現(xiàn),但是組合不具有這種特性。
6. 同樣需要注意的是,如果您決定重用另一個(gè)類的方法永遠(yuǎn)不需要更改,那么您應(yīng)該使用composition,因?yàn)閏omposition只是重用包含的類的接口,繼承甚至可以重寫這些接口,除了重用父類的接口之外,還可以修改父類接口的默認(rèn)實(shí)現(xiàn)。構(gòu)圖不具備這一特點(diǎn)。
7. 從邏輯上講,這種結(jié)合主要體現(xiàn)了整體和局部的思想。例如,computer類由memory類、CPU類、hard disk類等組成,繼承反映了一種可追溯的父子關(guān)系,子類也是父類的對(duì)象。
8. 二者的區(qū)別主要體現(xiàn)在類的抽象階段。在分析類之間的關(guān)系時(shí),我們應(yīng)該決定是使用組合還是繼承。
9. 引用網(wǎng)友的一句經(jīng)典名言,我們應(yīng)該能夠分清繼承和結(jié)合的區(qū)別:結(jié)合可以說是“我雇了一位老人在家工作”,而繼承是“我父親幫我在家工作”。
java中子類可以繼承父類的靜態(tài)變量和靜態(tài)方法嗎?
否。如果在子類中定義了相同的靜態(tài)變量,則它是新的,與父類無關(guān)。說明:靜態(tài)變量被初始化并加載到內(nèi)存中,因此沒有重寫關(guān)系。父子關(guān)系需要子類來實(shí)現(xiàn)父類的方法,因此靜態(tài)變量和方法不會(huì)被繼承。注意:如果父類是一個(gè)接口,則沒有方法實(shí)現(xiàn)。根本沒有靜態(tài)方法和變量。