java接口在JAVA編程語言中是一個(gè)抽象類型,接口通常以interface來聲明,一個(gè)類通過繼承接口的方式,從而來繼承接口的抽象方法。那java中接口可以實(shí)例化嗎?下面來我們就來給大家講解一下java接口相關(guān)知識(shí)。
接口不可以實(shí)例化。但是接口對(duì)象可以指向它的實(shí)現(xiàn)類對(duì)象。接口可以看做特殊的抽象類,只是所有的方法都是抽象方法(沒有實(shí)現(xiàn)的方法),接口的方法都是默認(rèn)public abstract的,所以不能被實(shí)例化。
為什么不能實(shí)例化?
首先,我們需要明白實(shí)例化的含義。實(shí)例化實(shí)際意義是在jvm的堆中開辟出一塊內(nèi)存空間,比如Student s = new Student();此處聲明Student對(duì)象s,并且實(shí)例化一個(gè)Student對(duì)象,實(shí)則是在堆中開辟出一塊空間來存放Student對(duì)象,s則是指向這塊空間,也就是內(nèi)存中的一塊地址。這塊地址中所存放的值就是我們這個(gè)Student對(duì)象的一些屬性。
具體類所占用的內(nèi)存空間(也就是堆里的一塊地址)所存放的值是類的成員變量,這里插入一張圖便于我們理解:
圖中可以看到,棧中存放的是per,值是堆中具體Person這個(gè)對(duì)象的地址,也就是per指向這個(gè)具體類的引用。而堆中一塊地址,存放的值是Person這個(gè)類的成員變量(局部變量在執(zhí)行時(shí)存放在棧中)。
那么換做一個(gè)接口呢?假設(shè)我們可以new出一個(gè)接口,那么這個(gè)接口就會(huì)占用堆中的一塊地址,那么我們想想接口的這塊地址上能夠存放什么值呢。
說到這個(gè)首先要清楚接口中允許有什么:靜態(tài)的屬性以及方法聲明。這里再說明下,java的內(nèi)存空間分為四類:棧(stack)、堆(heap)、代碼(code)、靜態(tài)數(shù)據(jù)(data)。由此可見接口中所有的東西的具體值都是存放在代碼去和靜態(tài)數(shù)據(jù)區(qū)的,所以接口的這塊地址上并沒有任何實(shí)際的值需要存儲(chǔ),那么為什么要給他一塊地址來浪費(fèi)空間呢。其實(shí)用底層代碼在內(nèi)存中開辟出一塊空間很容易,那么為什么java設(shè)定不允許接口實(shí)例化呢,以我的理解而言,那就是接口的實(shí)例化沒有任何實(shí)際意義,只會(huì)占用一塊內(nèi)存空間,卻不會(huì)在這塊空間中放任何實(shí)際的值,所以java主動(dòng)去規(guī)避掉了這個(gè)問題。
總之要大家要知道java中接口是無法被實(shí)例化,但是可以被實(shí)現(xiàn)哦,最后大家如果想要了解更多java初識(shí)知識(shí),敬請(qǐng)關(guān)注賦能網(wǎng)。
本文鏈接:
本文章“java中接口可以實(shí)例化嗎?為什么不能實(shí)例化?”已幫助 63 人
免責(zé)聲明:本信息由用戶發(fā)布,本站不承擔(dān)本信息引起的任何交易及知識(shí)產(chǎn)權(quán)侵權(quán)的法律責(zé)任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓(xùn)機(jī)構(gòu)》培訓(xùn)課程》學(xué)習(xí)資訊》課程優(yōu)惠》課程開班》學(xué)校地址等機(jī)構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細(xì)解答:
咨詢熱線:4008-569-579