内部类总结
1,定义,在其他类内部定义的类(嵌套类);与之相对的,包含内部类的类也称作外部类(宿主类)。
2,主要作用
a,内部类提供了更好的封装,不允许同一包的其他类访问该类。
b,内部类成员可以直接访问外部类的私有数据,但外部类无法直接访问内部类的实现细节。
c,匿名内部类适合用于创建那些仅需要一次使用的类。
3,定义内部类的语法
a,定义在其他类里面;
b,内部类比外部类可以多使用三个修饰符:private、protected和static
c,非静态内部类不能拥有静态成员。
4,非静态内部类
1)外部类和内部类的区别
a,外部类,上一级程序单元是包。两个作用域:同一包内及任意位置;只有两种访问权限:包访问权限default和公开访问权限public
b,内部类,上一级程序单元是外部类。四个作用域:同一类、同一包、父子类以及任何位置。
2)外部类成员变量、内部类成员变量与内部类里方法的局部变量同名时,则可通过使用this、外部类类名.this作为限定来区分。
3)外部类的成员无法访问非静态内部类的成员,必须显示的创建非静态内部类对象来调用访问其实例成员。原因如下:
a,因为非静态内部类的成员只在非静态内部类范围内可知。
b,创建外部类对象是,非静态内部类对象不一定存在。
4)非静态内部类里不能有静态方法、静态成员变量、静态初始化块。
5,静态内部类
1)使用static修饰的内部类被称作类内部类(静态内部类)。
2)静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
3)接口内部类只能是静态内部类。默认使用public static 修饰。
6,使用内部类
1)在外部类内部使用内部类
不要在外部类的静态成员(包括静态和非静态两种)使用非静态内部类,因为静态成员不能访问非静态成员。
2)在外部类以外使用非静态内部类
a,省略访问控制符的内部类,只能被与外部类处于同一包中的其他类所访问;
b,使用protected修饰的内部类,可被与外部类处于同一包中的其他类和外部类的子类所访问。
c,使用public修饰的内部类,可以在任何地方被访问。
3)在外部类以外使用静态内部类
静态内部类只需要使用外部类即可调用构造器,而非静态内部类必须使用外部类对象来调用构造器。
7,局部内部类
1)定义:一个内部类在方法中定义
2)如果需要使用局部内部类定义变量、创建实例或者派生子类,那么只能子啊局部内部类所在的方法内进行。
|
|