内部类有四种:静态内部类(static) 内部类 局部内部类(方法体中定义的类) 匿名内部类(一次性使用new 类名(){...})
使用
外部类如何调用静态内部类中的属性和方法
1)外部类可以通过创建静态内部类实例的方法来调用静态内部类的非静态属性和方法
2)外部类可以直接通过“ 外部类.内部类.属性(方法)” 的方式直接调用静态内部类中的静态属性和方法
静态内部类如何调用外部类的属性和方法
1)静态内部类可以直接调用外部类的静态属性和方法
2)静态内部类可以通过创建外部类实例的方法调用外部类的非静态属性和方法
如何创建静态内部类实例
1)在非外部类中:外部类名.内部类名 name = new 外部类名.内部类名();
2)在外部类中:内部类名 name = new 内部类名();
特点
1.静态类只能在内部类中定义
2.不能在静态内部类中写抽象方法
3.静态内部类与外层类绑定,即使没有创建外层类的对象,它一样存在
4.如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候,是不能够被定义成静态的
与非静态内部类区别
1.是否能拥有静态成员
非静态内部类不能拥有静态非final的成员,包括定义接口(内部类中接口默认为静态的),静态代码块
2.访问外部类的成员
静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性),其实这里说的不严谨,静态内部类可以通过创建外部类的对象来调用外部类的所有非静态成员,另外静态内部类可以直接调用外部类的所有静态成员,所以静态内部类直观上更加易用。
3.静态内部类和非静态内部类在创建时有区别
//假设类A有静态内部类B和非静态内部类C,创建B和C的区别为:
A a=new A();
A.B b=new A.B();
A.C c=a.new C();
补充:静态内部类用static修饰之后,就可以升级为顶级类,也就是说,除了这个类是在一个类内部以外,它具有外部类的所有特性,如:可以定义静态成员,可以定义接口等,所以在写内部类的时候一般会定义成静态内部类
转载自:https://www.cnblogs.com/insist-bin/p/11137675.html(静态内部类)