Java内部类全接触

来源:互联网 发布:网络恐怖主义犯罪 编辑:程序博客网 时间:2024/05/16 09:18

内部类也就是定义在类内部的类,可以将其分为以下四种:

1、成员内部类、 
2、局部内部类、
3、静态内部类、
4、匿名内部类

 

一、成员内部类

1、四个访问权限修饰符都可以修饰成员内部类。
2、内部类和外部类在编译时是不同的两个类,即在编译时生成的各自的字节码文件(Outer.class和Outer$Inner.class),没有任何依赖。
3、内部类中可以访问外部类的成员,包括静态成员、实例成员和私有成员。
4、内部类作为外部类的一个成员存在,与外部类的属性、方法并列。
5、内部类中的实例变量和外部类的实例变量可以同名。
6、在内部类中访问其本身的实例变量:this.属性
7、在内部类访问外部类的实例变量:外部类名.this.属性。
8、在外部类的外部创建内部类对象,使用Outer.Inner obj=new Outer().new Inner()的形式。

9、用内部类定义在外部类中不可访问的属性,这样就在外部类中实现了比外部类的private还要小的访问权限。
10、成员内部类不能含有静态成员。

 

二、静态内部类

1、静态内部类定义在类中,任何方法外,用static class定义。
2、静态内部类只能访问外部类的静态成员。
3、生成(new)一个静态内部类对象不需要外部类对象,即静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner(),这是静态内部类和成员内部类的区别。
4、静态内部类的一般用途是,在进行一个大型项目时,程序员们定义的类可能会重复,产生冲突,利用静态公有内部类可以解决这个问题。

 

三、局部内部类

1、在方法中定义的内部类称为局部内部类。
2、与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。
3、局部内部类不仅可以访问外部类私有实例变量,还可以访问外部类方法的局部常量(也就是局部变量必须为final的)。
4、在类外不可直接访问局部内部类(保证局部内部类对外是不可见的),只有在方法中才能调用其局部内部类。
5、通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。

6、局部内部类不能声明为static。

 

四、匿名内部类

1、一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。
2、只是为了获得一个对象实例,不许要知道其实际类型。
3、类名没有意义,也就是不需要使用到。