北大青鳥(niǎo)北京學(xué)校學(xué)術(shù)部:
在Java內(nèi)部類(lèi)中可以隨意使用外部類(lèi)的成員方法以及成員變量。
眾所周知,在定義成員方法或者成員變量的時(shí)候,可以給其加上一些權(quán)限的修飾詞,以防止其他類(lèi)的訪(fǎng)問(wèn)。如在成員變量或者成員方法前面,加上Private關(guān)鍵字,則其他類(lèi)就無(wú)法調(diào)用這個(gè)類(lèi)中的成員方法或則和成員變量。但是,如果這個(gè)類(lèi)有成員內(nèi)部類(lèi),則不受這方面的限制。也就是說(shuō),在成員內(nèi)部類(lèi)中可以隨意引用外部類(lèi)的成員方法以及成員變量,即使這些類(lèi)成員方法或者成員變量被修飾了private。如在成員外部類(lèi)中定義了一個(gè)i變量,并且利用private關(guān)鍵字來(lái)修飾。此時(shí)在其他類(lèi)中是不能夠引用這個(gè)私有成員變量的。但是這個(gè)類(lèi)的成員內(nèi)部類(lèi)的方法中,則不僅可以引用這個(gè)外部類(lèi)的私有變量,而且還可以對(duì)其進(jìn)行賦值等操作。這個(gè)賦值操作對(duì)于外部類(lèi)也是有效的。即成員內(nèi)部類(lèi)可以更改外部類(lèi)中私有變量的值。(深入理解嵌套類(lèi)和內(nèi)部類(lèi))(北大青鳥(niǎo)北京學(xué)校)
要在外部類(lèi)中實(shí)例化內(nèi)部類(lèi)對(duì)象的引用。
如果一個(gè)類(lèi)定義在另外一個(gè)類(lèi)中,成為成員內(nèi)部類(lèi),此時(shí)一定要注意,內(nèi)部類(lèi)的實(shí)例一定要綁定在Java外部類(lèi)的實(shí)例上。(如何在內(nèi)部類(lèi)中返回外部類(lèi)對(duì)象)也就是說(shuō),要從外部類(lèi)中初始化一個(gè)內(nèi)部類(lèi)的對(duì)象,此時(shí)內(nèi)部類(lèi)的對(duì)象就會(huì)綁定在外部類(lèi)的對(duì)象上。這跟普通的類(lèi)有所不同。普通的類(lèi),創(chuàng)建完之后,不一定馬上需要實(shí)例化。在需要用到這個(gè)對(duì)象的時(shí)候,再進(jìn)行實(shí)例化即可。但是,如果一個(gè)類(lèi)成為另外一個(gè)類(lèi)的成員內(nèi)部類(lèi),則就不同了。必須要在外部類(lèi)中實(shí)例化內(nèi)部類(lèi)對(duì)象的引用,以實(shí)現(xiàn)將內(nèi)部類(lèi)的實(shí)例綁定在外部類(lèi)的實(shí)例上。簡(jiǎn)單的說(shuō),就是在定義外部類(lèi)的時(shí)候,如果有成員內(nèi)部類(lèi),那么就不要望了在外部類(lèi)中利用new關(guān)鍵字來(lái)實(shí)例化內(nèi)部類(lèi)對(duì)象的引用。而對(duì)于外部類(lèi)來(lái)說(shuō),則可以在需要的時(shí)候再進(jìn)行實(shí)例化。如此就可以保證,利用外部類(lèi)創(chuàng)建對(duì)象的同時(shí)創(chuàng)建了內(nèi)部類(lèi)的對(duì)象。從而可以保證Java內(nèi)部類(lèi)的實(shí)例綁定在外部類(lèi)的實(shí)例上。(北大青鳥(niǎo)北京學(xué)校)