內部類:即定義在一個類內部的類毛俏。
為什么會有內部類绍弟?
1.java中的類是單繼承的,一個類只能繼承另一個具體類或者抽象類(可以實現(xiàn)多個接口)邪财。這種設計的目的是因為在多繼承中,當多個父類中有重復的屬性或者方法時质欲,子類的調用結果會含糊不清树埠,因此使用單繼承。
使用內部類的原因也是因為java單繼承的影響:每個內部類都能夠單獨的繼承一個(接口的)實現(xiàn)嘶伟,所以無論外面類是否已經繼承了某個(接口的)實現(xiàn)怎憋,對于內部類都沒有印象。
內部類的應用場景:在程序設計中九昧,有時候會存在一些使用接口很難解決的問題绊袋,這個時候我們可以利用內部類提供的,可以繼承多個具體的或者抽象類的能力來解決程序設計問題铸鹰。
在成員內部類中要注意兩點:
成員內部類中不能存在任何static的變量和方法癌别;
成員內部類是依附于外圍類的,所以只有先創(chuàng)建了外圍類才能夠創(chuàng)建內部類蹋笼。
靜態(tài)內部類:
靜態(tài)內部類和非靜態(tài)內部類之間存在一個最大的區(qū)別:非靜態(tài)內部類在編譯完成之后會隱含地保存著一個引用展姐,該引用是指向創(chuàng)建它的外部類,但是靜態(tài)內部類卻沒有這個引用剖毯。
沒有這個引用意味著:
1.它的創(chuàng)建不需要依賴外部類圾笨。
2.它不能使用任何外部類的非static成員變量和方法。
其它兩種內部類:局部內部類和匿名內部類
局部內部類
局部內部類是嵌套在方法和作用于內的逊谋,對于這個類的使用主要是應用與解決比較復雜的問題擂达,想創(chuàng)建一個類來輔助我們的解決方案,到那時又不希望這個類是公共可用的胶滋,所以就產生了局部內部類板鬓,局部內部類和成員內部類一樣被編譯悲敷,只是它的作用域發(fā)生了改變,它只能在該方法和屬性中被使用穗熬,出了該方法和屬性就會失效镀迂。
匿名內部類
1、匿名內部類是沒有訪問修飾符的唤蔗。
2探遵、new 匿名內部類,這個類首先是要存在的妓柜。
3箱季、當所在方法的形參需要被匿名內部類使用,那么這個形參就必須為final棍掐。
4藏雏、匿名內部類沒有明面上的構造方法,編譯器會自動生成一個引用外部類的構造方法作煌。