Java的内部类

来源:互联网 发布:淘宝孕妇套装 编辑:程序博客网 时间:2024/05/28 23:22

Java的内部类

 

内部类定义:

在某些情况下,我们把一个类放在另一个类的内部定义,这个定义在其它类内部的类就被称为内部类,包含内部类的类被称为外部类。

 

内部类的作用:

1.内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其它类访问该类。

2.内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以相互访问。但外部类不能访问内部类的实现细节。

3.匿名内部类适合用于创建那些仅需要一次使用的类。

 

内部类的分类:

在类的内部的类就是内部类。内部类可以作为外部类的成员,可以存在于外部类的方法体中,可以作为外部类的方法的参数。

成员内部类:作为外部类的成员。

局部内部类:存在于外部类的方法体中。

匿名内部类:作为外部类的方法的参数。

其中成员内部类又可分为非静态成员内部类和静态成员内部类,简称非静态内部类和静态内部类。

 

成员内部类可以使用任意访问控制符如publicprotecteddefaultprivate修饰:

外部类的上一级程序单元是包,所以它只有2个作用域:同一个包内和任何位置。因此只需要2种访问权限:包内访问权限和公开访问权限,正好对应省略访问控制符default和公开访问控制符public

而内部类的上一级程序单元是外部类,它就具有4个作用域:同一个类、同一个包、有继承关系的类和任何位置,因此可以使用4中访问控制权限。

 

非静态内部类:

非静态内部类的成员可以访问外部类的private成员,但反过来就不成立了。非静态内部类的成员只在非静态内部类范围内是可知的,并不能被外部类之间使用。

根据静态成员不能访问非静态成员的规则,外部类的静态方法、静态代码块不能访问非静态内部类。总之,不允许在外部类的静态成员中直接使用非静态内部类。

 

静态内部类:

静态内部类属于外部类本身,而不属于外部类的某个对象。

静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非静态成员的规则,静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。

静态内部类是外部类的一个静态成员,因此外部类的静态方法、静态初始化块中可以使用静态内部类定义变量、创建对象等。

Java允许在接口里定义内部类,接口里定义的内部类默认使用public static修饰符,也就是说,接口内部类只能是静态内部类。

 

在外部类以外使用非静态内部类:

在外部类以外的地方定义内部类(包括静态和非静态两种)变量的语法格式如下:

OuterClass.InnerClass  varName

从上面的语法格式看出,在外部类以外的地方使用内部类时,内部类完整的类名应该是OuterClass.InnerClass。如果外部类有包名,则还应该增加包名前缀。

 

在外部类以外的地方创建非静态内部类实例的语法如下:

OuterClass.InnerClass in = new OuterClass().new InnerClass();

 

在外部类以外使用静态内部类:

在外部类以外的地方创建静态内部类实例的语法如下:

OuterClass.InnerClass in = new OuterClass. InnerClass();

 

静态内部类比非静态内部类更常用:

相比之下,使用静态内部类比使用非静态内部类要简单很多,因此成员需要使用内部类时,应该优先考虑使用静态内部类。

 

匿名内部类:

匿名内部类适合创建那种只需要一次使用的类,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击