为什么设计内部类
1、类B只用于服务类A,不需要与其他类产生依赖关系,就可以将B设置成A的内部类
2、类A里面有一些属性和方法可以抽出作为单独的模块或组件,就可以将其作为A的一个内部类
静态内部类就是个独立的类。
之所以要弄这么个东西,只是起到一个注释的效果,而且这个注释可静态检查。
比如有A,B两个类,B有点特殊,虽然可以独立存在,但只被A使用。
这时候怎么办?如果把B并入A里,复杂度提高,搞得A违反单一职责。如果B独立,又可能被其他类(比如同一个包下的C)依赖,不符合设计的本意。所以不如将其变成A.B,等于添加个注释,告诉其他类别使用B了,它只跟A玩。
非静态的才是真正的内部类,对其外部类有个引用。
静态内部类与普通内部类(非静态)
内部类可以认为是外部类的成员变量,普通内部类就是外部类的私有成员变量,因此依赖于外部类的实例对象。而静态内部类,可以看作是外部类的静态成员变量,是外部类的成员而不是外部类实例对象的成员,因此不要外部类实例化。只需要外部类被加载到内存中即可。
static class Outer {
class Inner {}
static class StaticInner {}
}
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.StaticInner inner0 = new Outer.StaticInner();复制代码
1、普通内部类
普通内部类依赖于外部类的创建,现有外部类对象,才有内部类成员。
2、静态内部类
静态内部类就是个独立的类,只不过想借外部类的壳,与外部类没有什么“强依赖的关系”,可以独立存在,没有你,我也可以创建实例。
如何设计
如果我内部类与你外部类关系不紧密,耦合程度不高,不需要访问外部类的所有属性或方法,那么我就设计成静态内部类。而且,由于静态内部类与外部类并不会保存相互之间的引用,因此在一定程度上,还会节省那么一点内存资源。
如果你的需求不符合静态内部类所提供的一切好处,你就应该考虑使用内部类了。最大的特点就是:你在内部类中需要访问有关外部类的所有属性及方法,我知晓你的一切