您好,歡迎來到賦能網(wǎng)!

java中接口可以實例化嗎?為什么不能實例化?

賦能網(wǎng) 2023-05-09 63

java接口在JAVA編程語言中是一個抽象類型,接口通常以interface來聲明,一個類通過繼承接口的方式,從而來繼承接口的抽象方法。那java中接口可以實例化嗎?下面來我們就來給大家講解一下java接口相關(guān)知識。

接口不可以實例化。但是接口對象可以指向它的實現(xiàn)類對象。接口可以看做特殊的抽象類,只是所有的方法都是抽象方法(沒有實現(xiàn)的方法),接口的方法都是默認public abstract的,所以不能被實例化。

為什么不能實例化?

首先,我們需要明白實例化的含義。實例化實際意義是在jvm的堆中開辟出一塊內(nèi)存空間,比如Student s = new Student();此處聲明Student對象s,并且實例化一個Student對象,實則是在堆中開辟出一塊空間來存放Student對象,s則是指向這塊空間,也就是內(nèi)存中的一塊地址。這塊地址中所存放的值就是我們這個Student對象的一些屬性。

具體類所占用的內(nèi)存空間(也就是堆里的一塊地址)所存放的值是類的成員變量,這里插入一張圖便于我們理解:

圖中可以看到,棧中存放的是per,值是堆中具體Person這個對象的地址,也就是per指向這個具體類的引用。而堆中一塊地址,存放的值是Person這個類的成員變量(局部變量在執(zhí)行時存放在棧中)。

那么換做一個接口呢?假設(shè)我們可以new出一個接口,那么這個接口就會占用堆中的一塊地址,那么我們想想接口的這塊地址上能夠存放什么值呢。

說到這個首先要清楚接口中允許有什么:靜態(tài)的屬性以及方法聲明。這里再說明下,java的內(nèi)存空間分為四類:棧(stack)、堆(heap)、代碼(code)、靜態(tài)數(shù)據(jù)(data)。由此可見接口中所有的東西的具體值都是存放在代碼去和靜態(tài)數(shù)據(jù)區(qū)的,所以接口的這塊地址上并沒有任何實際的值需要存儲,那么為什么要給他一塊地址來浪費空間呢。其實用底層代碼在內(nèi)存中開辟出一塊空間很容易,那么為什么java設(shè)定不允許接口實例化呢,以我的理解而言,那就是接口的實例化沒有任何實際意義,只會占用一塊內(nèi)存空間,卻不會在這塊空間中放任何實際的值,所以java主動去規(guī)避掉了這個問題。

總之要大家要知道java中接口是無法被實例化,但是可以被實現(xiàn)哦,最后大家如果想要了解更多java初識知識,敬請關(guān)注賦能網(wǎng)。


本文鏈接:

本文章“java中接口可以實例化嗎?為什么不能實例化?”已幫助 63 人

免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權(quán)侵權(quán)的法律責任!

本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構(gòu)》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579

如果本頁不是您要找的課程,您也可以百度查找一下: