java - 怎樣才算是一個(gè)內(nèi)部類
問(wèn)題描述
請(qǐng)問(wèn)下怎樣才算是一個(gè)內(nèi)部類,最近在看android的Handler方面的東西,有點(diǎn)被搞暈了,一般情況下的內(nèi)部類我是明白的,但是為什么Handler也算是Activity的一個(gè)內(nèi)部類。
public class MainActivity extends Activity{ private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) { super.handleMessage(msg);} }; }
Handler并已經(jīng)是一個(gè)被定義好的類,只不過(guò)在使用的時(shí)候一般回去重寫其中的handleMessage方法,這樣就算是一個(gè)內(nèi)部類了嗎?這里主要是想請(qǐng)問(wèn)下:
內(nèi)部類的定義是什么?
編譯器是怎么去判斷一個(gè)類是內(nèi)部類的
問(wèn)題解答
回答1:如果說(shuō)一般的內(nèi)部類你知道,那這個(gè)內(nèi)部類你應(yīng)該知道才是,因?yàn)樗亲罨镜摹?/p>
按照 Java 語(yǔ)言的官方定義,內(nèi)部類是這樣定義的:
A nested class is a member of its enclosing class.
如果一個(gè)類是另一個(gè)類的成員,那就是內(nèi)部類。內(nèi)部類又分為靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類
上述的 handler 是一個(gè)非靜態(tài)內(nèi)部類。與靜態(tài)內(nèi)部類不同的是,要初始化這樣的內(nèi)部類的實(shí)例,必須先有它的外部類的一個(gè)實(shí)例。在這樣的非靜態(tài)內(nèi)部類中,你可以通過(guò)MainActivity.this引用到外部類的實(shí)例。而靜態(tài)內(nèi)部類是不可以的。
編譯器只要識(shí)別到一個(gè)類是定義在另一個(gè)類的內(nèi)部,就能知道它是內(nèi)部類。
回答2:這個(gè)叫匿名內(nèi)部類
相關(guān)文章:
1. 我的html頁(yè)面一提交,網(wǎng)頁(yè)便顯示出了我的php代碼,求問(wèn)是什么原因?2. 我在centos容器里安裝docker,也就是在容器里安裝容器,報(bào)錯(cuò)了?3. 數(shù)據(jù)庫(kù) - 使用讀寫分離后, MySQL主從復(fù)制延遲會(huì)導(dǎo)致讀不到數(shù)據(jù)嗎?4. tp6表單令牌5. docker 17.03 怎么配置 registry mirror ?6. 老哥們求助啊7. django - 后臺(tái)返回的json數(shù)據(jù)經(jīng)過(guò)Base64加密,獲取時(shí)用python如何解密~!8. node.js - node 客戶端socket一直報(bào)錯(cuò)Error: read ECONNRESET,用php的socket沒(méi)問(wèn)題哈。。9. 如何解決docker宿主機(jī)無(wú)法訪問(wèn)容器中的服務(wù)?10. javascript - canvas 可以實(shí)現(xiàn) PS 魔法橡皮擦的功能嗎?
