静态内部类和非静态内部类的比较
1.1静态内部类和非静态内部类的区别
静态内部类只能访问外部类的静态成员和静态方法。
非静态内部类不管是静态方法还是非静态方法都可以在非静态内部类中访问。
静态内部类和非静态内部类主要的不同:
(1)静态内部类不依赖于外部类实例而被实例化,但非静态内部类需要在外部类实例化后才可以被实例化。
(2)静态内部类不需要持有外部类的引用。但非静态内部类需要持有对外部类的引用。
(3)静态内部类不能访问外部类的非静态成员变量和非静态方法。他只能访问外部类的静态成员和静态方法,非静态内部类能够访问外部类的静态和非静态成员和方法。
1.2扩展:内部类都有哪些?
有四种:静态内部类、非静态内部类、局部内部类、匿名内部类
1.3局部内部类
在外部类的方法中定义的类,其作用的范围是所在的方法内。他不能被public、private、protected来修饰。他只能访问方法中定义的final类型的局部变量。
1.4匿名内部类:是一种没有类名的内部类。
需要注意的是:
1、匿名内部类一定是在new的后面,这个匿名内部类必须继承一个父类或实现一个接口。
2、匿名内部类不能有构造函数。
3、只能创建匿名内部类的一个实例。
4、在Java8之前,如果匿名内部类需要访问外部类的局部变量,则必须用final修饰外部类的局部变量。在现在Java8已结取消了这个限制。