两种内部类
Java的内部类有两种,一种是静态内部类,另一种是普通内部类,普通内部类可以获得外部对象的引用,
所以在普通内部类能够访问外部对象的成员变量 ,也就能够使用外部类的资源,可以说普通内部类依赖
于外部类,普通内部类与外部类是共生共死的,创建普通内部类的对象之前,必须先创建外部类的对象。
创建普通内部类的代码如下:
Outer o = new Outer();
Outer.Inner inner = o.new Inner();
Outer.Inner inner = new o.Inner(); /* 错误 */
Outer.Inner inner = new Outer.Inner(); /* 错误 */
静态内部类没有外部对象的引用,所以它无法获得外部对象的资源,当然好处是,静态内部类无需依赖于
外部类,它可以独立于外部对象而存在。创建静态内部类的代码如下:
Outer.Inner inner = new Outer.Inner();
静态类的使用场景
在以下场合可以使用静态内部类:
(1) 外部类需要使用内部类,而内部类无需使用外部类的资源
(2) 内部类可以独立外部类创建对象
使用静态内部类的好处是加强了代码的封装性以及提高了代码的可读性。
静态内部类和普通内部类的区别
(1)普通内部类不能声明static的方法和变量
普通内部类不能声明static的方法和变量,注意这里说的是变量,常量(也就是final static修饰的属性)
还是可以的,而静态内部类形似外部类,没有任何限制。
(2)使用静态内部类,多个外部类的对象可以共享同一个内部类的对象。
使用普通内部类,每个外部类的对象都有自己的内部类对象,外部对象之间不能共享内部类的对象