一.
介绍一下内部类的小特点。内部类的定义位置,相当于定义在了外部类的成员位置上。它就可以被成员修饰符所修饰。这是外部类所不具备的。学过的成员修饰符有:public, private, static, 这些都是。 接下来准备演示一下,(这里讨论的就是,在不同的修饰下,如何访问内部类)
这里知识点的讲解,是围绕,修饰符修饰内部类或者修饰内部类中的成员展开的。
public没什么意思,公有,权限最大。
二. private修饰的内部类的情况
写个private,介绍一下。private只在本类中有效。
什么都不写也是一种权限,比public权限小,比private权限大。在这种权限下,我们如果在其他的类当中直接访问Inner类,这是可以完成的(这个完成也需要创建对象吧?)→这里访问的是内部类中的成员,我以为是访问内部类。访问内部类不就是访问内部类中的成员么?(通过下面截图的理解来看,其它类直接访问外部类中的内部类中的成员。什么是直接,和间接?)
上面截图的写法是不可以的,因为如果换种写法,如果再有一个OUter2类,里面也有Inner类(内部类),那么到底创建的是哪个外部类的内部类的对象呢?
这样的不确定,我们必须描述一下所属。我觉着数据都是有所属的。(这里知识点的学习在于格式)
对上图进行一个分析,in这个内部类变量必须有一个所属,属于哪个外部类的成员,所以有了Outer.Inner。接着右边,Inner类是一个外部类的成员,成员被访问要先有对象(通过外部类建立的对象,来访问外部类中的成员),new Outer(). 点号点上就意味着访问成员。这个成员就是一个类,所以new了一个对象。→是否可以说,不能访问类,只能访问该类对象?
这种格式不多见,为什么呢?有些情况下,内部类会被封装起来,不需要外界知道,也不能访问。
私有化的成员,比如私有化的函数,其他的类是无法知道,只能是本类对象知道来访问。
三. static修饰内部类的情况
最后一个关键字是static,就这个有点意思。
内部类静态了,这意味着外部类一加载,内部类就存在了。怎么访问内部类呢?
为什么会有这样的说法呢?(“相当于一个外部类”意味着什么?如果从书写的格式来看,就一个new,意味就相当于一个外部类层次的类)
截图讲解:等号左边是交代内部类所属,右边是新建对象,不用像之前一样先建立外部类对象再接着建立内部类对象,右边的new是创建内部类对象的关键字,这里Outer.只是交代内部类的所属。private修饰的情况中,第一个new是代表创建外部类的对象么?
静态成员只能是静态之间相互使用,因此要修改语句。
接着对程序再进行改变,静态内部类中还有静态方法。
这时候连内部类的对象都不需要了,
最后精彩的部分来了,程序再次进行修改,将内部类前面的静态修饰删去了。(为什么说精彩?内部类没有static修饰,那么就需要创建外部类对象来访问内部类,但是内部类中的成员是static修饰的,不需要创建内部类对象来访问其成员,内部类的成员是随着内部类加载而直接加载的。)
这里产生一个规则,如果内部类里面有静态成员,那么内部类必须被静态修饰。
如果是静态的话,通常随着类的加载而加载,我们就不需要创建对象了。直接用外部类名.内部类名.就可以了,但是内部类是非静态,外部类加载进来了,内部类没有加载进来,不能直接调用内部类,还必须创建内部类对象。(内部类创建了对象也无法调用,内部的静态成员。而外部类想使用内部类,还必须创建内部类对象(这句话说的对么?如果按这样的说法,目前这样的规则可以说的通。),这样就矛盾了,无法使用内部类里的静态成员)
内部类和其成员可以同时使用static修饰,或者只有内部类使用static修饰。private修饰不会出现内部类中成员不允许修饰符修饰的情况。
四.
三种格式如下:
开发中,这些都不是特别常见。