特點(diǎn):
上溯造型的時(shí)候,內(nèi)部類除了對(duì)該類可以見,對(duì)任何父類和子類都不可見。
普通類不能被設(shè)置為protected何private類型,但是內(nèi)部類可以。
分類:
非靜態(tài)內(nèi)部類,匿名內(nèi)部類,局部內(nèi)部類,靜態(tài)內(nèi)部類。
非靜態(tài)內(nèi)部類:
對(duì)象依賴外部類對(duì)象的存在而存在,會(huì)持有外部類對(duì)象的引用。
非靜態(tài)內(nèi)部類直接持有外部類的對(duì)象的引用
外部類不直接持有非靜態(tài)內(nèi)部類的對(duì)象的引用
匿名內(nèi)部類:
匿名內(nèi)部類的方法形參類型為final,匿名內(nèi)部類中傳入的變量與原變量不是同一個(gè)引用,是拷貝的變量,為了數(shù)據(jù)同步就不能夠修改原變量,也就不存在修改完不同步的問題了。
匿名內(nèi)部類無法聲明構(gòu)造函數(shù)。
局部內(nèi)部類:
局部內(nèi)部類和非靜態(tài)內(nèi)部類一樣,但是其作用范圍在作用域(scope)范圍內(nèi),在作用域外部無法顯式地引用或生成一個(gè)局部內(nèi)部類的實(shí)例。
局部內(nèi)部類直接持有外部類的對(duì)象的引用
Tips: 這三種內(nèi)部類不能有任何static數(shù)據(jù),包括static內(nèi)部類,其對(duì)象的創(chuàng)建完全依賴外部類。
靜態(tài)內(nèi)部類:
不依賴外部類對(duì)象而存在
不能引用任何外部類的非static變量和方法
內(nèi)部類的繼承:
使用enclosingClassReference.super() ,在繼承其他類的內(nèi)部類的時(shí)候,構(gòu)造器一定要傳入一個(gè)其外部類的對(duì)象才能使用,并在構(gòu)造器中利用傳入的對(duì)象調(diào)用該對(duì)象的構(gòu)造器,即在構(gòu)造器中調(diào)用instance.super();
類的繼承與內(nèi)部類的覆蓋
當(dāng)子類繼承父類時(shí),擁有相同命名的內(nèi)部類,這并不能夠覆蓋父類的內(nèi)部類,其生成規(guī)則和調(diào)用還是根據(jù)對(duì)象的實(shí)際類型。