内部类作用:
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.静态内部类,也是延时加载的只有静态方法被调用时候才会加载此类;