Java中的各種內部類
內部類,外部類,其他外部類。內部類寫在外部類中
內部類:定義在一個類中; 1.內部類可以直接訪問其所在類中的成員,包括私有,不必建立外部類物件。 為什麼能直接訪問哪? 是因為內部類在訪問外部類成員時,持有了一個外部類的引用,格式:外部類名.this 2.外部類要訪問內部類,必須建立內部類物件。 內部類名 物件名 = new 內部類名()
怎麼在其它外部類中直接訪問內部類中的成員?
建立內部類物件 外部類名.內部類名 物件名 = new 外部類名().new 內部類名() 物件.內部類成員 (用的比較少,面試可能會遇到)
因為內部類在外部類的成員位置上,所以內部類可以被成員修飾符修飾。 比如,1.private,將內部類在外部類中進行封裝。 2.static 用此修飾符時,內部類就具備了static的特性。
靜態內部類
當內部類被static修飾後,只能訪問外部類中的static成員,出現了訪問侷限
什麼時候用到靜態內部類? 當外部類所有成員都是公共屬性的時候。
怎麼在外部類中訪問靜態內部類中的非靜態成員或者方法? 一般靜態成員都可以通過類名訪問。所以,可以通過外部類名訪問內部靜態類,建立一個靜態內部類物件來訪問。 new 外部類名.內部類名().成員方法
注意:當內部類中定義了靜態成員,該內部類必須是被static修飾的。 當外部類中的靜態方法訪問內部類的方法時,內部類也必須是static修飾的
什麼時候用到內部類? 當描述事物時,事物的內部還有事物,該事物用內部類描述。 因為內部事物在使用外部事物的內容。、
比如,描述人體,人體有心肝脾肺腎等複雜的個體。 多個個體又有自己的功能。 比如心臟,屬於人體內的一部分,並且心臟會訪問人體內的其他器官。 如果把心臟類定義在人體外,心臟訪問人體內的其他器官還需要建立人體物件 所以把心臟類放到人體類中,並可以私有一下,只有人體內的方法才能訪問。 並可以設定對人體外的介面。程式碼才能最優。
注意:以上說的都是把內部類定義在了外部類的成員位置上。
內部類也可以定義在外部類的方法中,叫做區域性內部類,訪問規則沒有變,還是可以訪問 外部類中的成員。因為還持有外部類的引用。 侷限性: 1.區域性內部類不能被static修飾了,因為static只能修飾成員,不能修飾區域性。 所以區域性內部類也不能定義靜態方法。 2.不可以訪問它所在的方法中的常規變數。只能訪問其所在方法中被finall修飾的區域性變數。
匿名內部類: 目的 :簡化書寫,覆蓋方法
1.匿名內部類其實就是內部類的簡寫格式。 只要是簡化,都會有前提,也會有其好處和弊端。 前提: 內部類要實現匿名,此內部類必須繼承一個類,或者是實現介面。
3.內部類的格式: new 父類或者介面(){ 定義子類的內容} 4.其實匿名內部類就是一個匿名子類物件。
5.匿名內部類中定義的方法最好不超過3個