一、.非静态内部类
静态内部类和非静态内部类最大的区别是:非静态内部类编译后隐式保存着外部类的引用(就算外部类对象没用了也GC不掉),但是静态内部类没有。
非静态内部类创建实例,要通过外部类的实例创建:静态内部类创建实例通过外部类类本身
非静态内部类:
OutClass.InnerClass obj = outClassInstance.new InnerClass(); //注意是外部类实例.new
静态内部类:
AAA.StaticInner in = new AAA.StaticInner();//注意是外部类本身
二、静态内部类
如果用static来修饰一个内部类,那么就是静态内部类。这个内部类属于外部类本身,但是不属于外部类的任何实例对象。
定义静态内部类:在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。
通常称为嵌套类,当内部类是static时,意味着:
[1]要创建嵌套类的对象,并不需要其外围类的对象;
[2]不能从嵌套类的对象中访问非静态的外围类对象(不能够从静态内部类的对象中访问外部类的非静态成员);
原文:https://www.cnblogs.com/jingpeng77/p/13378744.html