内部类
Posted learnsb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部类相关的知识,希望对你有一定的参考价值。
内部类
成员内部类
场景一:看到成员两个字,我们首先就想到了同样含有”成员“的成员变量,我们知道成员变量是定义在类中,所有方法(函数)之外的变量;那么成员内部类是否和成员变量处于相同的位置呢?
1)是的,成员内部类定义在一个类的里面(由此可以访问其外部类的私有属性),所有函数(方法)的外面。
2)private关键字可以修饰成员内部类,表示这个内部类只能在其外部类内部使用。
3)内部类会生成独立的.class文件。
场景二:既然成员内部类这么特殊,那么如何创建成员内部类的对象呢?
1)在其外部类内部创建内部类的对象,直接创建即可。
2)在非外部类内部创建内部类的对象,需要先创建其外部类对象(内部类是可以访问其外部类的成员变量的,但是每个外部类对象的成员变量属性可能是不一致的,内部类访问外部类成员变量属性的时候,我们需要确认外部类成员变量的值),再创建内部类对象。
静态内部类
我们之前有说过,static关键字是不能去修饰类的对不对?是的,但是static可以修饰内部类,成为静态内部类。
那么成员内部类与静态内部类在使用上有什么区别呢?
我们先看下成员内部类和静态内部类在访问外部类成员上的不同:成员内部类是可以访问其外部类的所有静态以及非静态成员的,但是不能在一个成员内部类中定义静态方法(初始化时间冲突);但是静态内部类只能访问其外部类的静态成员;
场景二:创建静态内部类的对象
1)在外部类中创建静态内部类的对象,与成员内部类并无区别,直接创建即可。
2)在外部类的外部创建静态内部类的对象,可以使用“外部类.内部类”的方式创建。
局部内部类
看到局部两个字,会不会首先想到‘局部变量’呢?所谓局部变量,指得是定义在方法内部的变量。我们今天要说的局部内部类也与之类似,局部内部类,指得就是定义在方法内部的类。
场景一:我们在外部类的某个方法内定义了一个内部类,这就是局部内部类;与局部变量的作用范围相同,也是仅仅在方法内使用。局部内部类可以访问外部类的静态属性和私有属性。
场景二:局部内部类是否可以访问方法中处于相同位置的局部变量呢?
我们知道局部变量会在方法(函数)执行完后就自动释放内存的,也就是说方法执行完之后,这个局部变量是要被清除的;如果我们在这个局部变量被清除的情况下去访问它,肯定是不能编译通过的!那么有什么解决的方法吗?我们再回忆下final这个关键字,当它修饰变量的时候,变量会变成常量,一个常量是不会像局部变量一样再方法调用后直接被清除的,所以我们可以使用final关键字修饰方法的局部变量。
匿名内部类
以上是关于内部类的主要内容,如果未能解决你的问题,请参考以下文章