內部類作用:
1.實現數據的隱藏,實現了封裝,類可以定義為private或者protected, 外部不能訪問。
2.如果兩個類之間的耦合性特別強,可以使用內部類,增強類之間的使用關系
3.內部類可以使用外部類的成員變量和成員方法等所有元素,包括私有的
4.內部類創建方法 ObjectA A = new ObjectA(); ObjectB B = A.new ObjectB();
5. 內部類實現了代碼的簡潔性
6.可以實現多重繼承,彌補了JAVA語言多繼承缺點,這個特點非常重要,個人認為它是內部類存在的最大理由之一。正是由于他的存在使得Java的繼承機制更加完善。大家都知道Java只能繼承一個類,它的多重繼承在我們沒有學習內部類之前是用接口來實現的。但使用接口有時候有很多不方便的地方。比如我們實現一個接口就必須實現它里面的所有方法。而有了內部類就不一樣了。它可以使我們的類繼承多個具體類或抽象類。大家看下面的例子。
7?避免修改接口而實現同一個類中兩種同名方法的調用。
8.內部類是延時加載的,只有內部類被調用時候才會加載;
靜態內部類與內部類區別:
1. 靜態內部類不持有外部類的引用,不能訪問外部類的元素
2.創建方法不同 ObjectB B = new ObjectA.ObjectB();
3.另外因為靜態嵌套類是依附于外部類而非外部類對象的,所以不同的外部類對象共享一個靜態嵌套類,這一點與內部類不同,可以用來包裝方法,實現工廠模式。
4.生成一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類(正常情況下,你不能在接口內部放置任何代碼,但嵌套類可以作為接口的一部分,因為它是static 的。只是將嵌套類置于接口的命名空間內,這并不違反接口的規則)
public interface Outer {public static final class inner{ ? ? ? ?void dosth() {System.out.println("I'm a inner class in interface");}}}
5.靜態內部類,也是延時加載的只有靜態方法被調用時候才會加載此類;