java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类 。其实从定义的的范围来看内部类可以简单的分为两种:成员内部类、方法内部类。


内部类的共性

(1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。

(2)、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 。

(3)、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量


为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。


静态内部类的使用场景

(1)、外部类需要使用内部类,而内部类无需使用外部类的资源

(2)、内部类可以独立外部类创建对象


静态内部类和普通内部类的区别

(1)、普通内部类不能声明static的方法和变量

普通内部类不能声明static的方法和变量,注意这里说的是变量,常量(也就是final static修饰的属性)

还是可以的,而静态内部类形似外部类,没有任何限制。

(2)、使用静态内部类,多个外部类的对象可以共享同一个内部类的对象。

使用普通内部类,每个外部类的对象都有自己的内部类对象,外部对象之间不能共享内部类的对象