java子类继承父类实际_java子类继承父类,是否生成父类对象?
從根本上來說,對象就是一個特殊結(jié)構的內(nèi)存以及可以訪問這塊內(nèi)存的代碼。所以你這個問題其實就是一個到底如何看什么是對象的。
我不了解現(xiàn)在jvm的具體實現(xiàn),所以只能就理論上進行下分析。
由于現(xiàn)代的編譯器都可以對內(nèi)存及其訪問進行優(yōu)化,所以,如果當子類增加了新的屬性:
比如父類是一個字節(jié)和一個整數(shù),子類又增加了一個字節(jié)和一個整數(shù)
而編譯器對子類內(nèi)存數(shù)據(jù)的位置進行了調(diào)整的話,那在邏輯層面上結(jié)構沒有變化,但物理層面上,訪問各項數(shù)據(jù)的地址可能就發(fā)生了變化。
而在子類初始化時是先統(tǒng)一分配內(nèi)存,然后先調(diào)用父類的初始化器,再調(diào)用自己的初始化器的,而如果編譯器調(diào)整了子類中父類那部分數(shù)據(jù)的地址的話,則子類所調(diào)用的父類初始化器其實是原本父類初始化器的一個多態(tài)函數(shù)(因為在物理層面上數(shù)據(jù)的訪問地址發(fā)生了變化,所以訪問的以及是一個新的數(shù)據(jù)結(jié)構了),實質(zhì)上和原始的父類初始化器是兩個函數(shù)。
這樣的話,從子類來看,其父類的數(shù)據(jù)及初始化器都發(fā)生了變化,這個父對象和真正的父類的對象也就只具有邏輯上的等價性了。
所以這個問題,在邏輯上肯定是先要生成并初始化一個父對象,然后再增加自己的擴展并適當修改父類的行為,這本就是OOP的基本思想。但在物理層面上,則是根據(jù)實際情況由編譯器自行決定。
因為現(xiàn)代程序技術(同樣也是IT、甚至是整個工程技術領域)的核心思想就是自己管好自己的事,其他人只和我們通過接口/API進行契約,怎么干那是他的事,所以這個問題其實就是要看你站在哪邊了,如果是研究編譯器的,那肯定是沒有生成父對象,如果只是用編譯器進行編程,那就一定是先生成父對象,然后再進行擴展和修改
這個思想就是我們常說的透明性,跨過邊界多了解點對方是如何工作的,有助于我們理解對方所提出的契約要求,這會幫助雙方更好的配合工作,但你的重心是一定要先搞定自己一側(cè)的東東,所以你的問題其實是沒有深刻的理解到底什么是面對對象技術。
總結(jié)
以上是生活随笔為你收集整理的java子类继承父类实际_java子类继承父类,是否生成父类对象?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Powerbi实战--常用新建表代码(单
- 下一篇: ClickHouse高可用及副本测试