要点:
内部类在概念和语法上都被视为外部类的成员。就像成员变量和成员方法一样。
目录
内部类在概念和语法上都被视为外部类的成员。就像成员变量和成员方法一样。
一.静态内部类
静态内部类是在一个类内部定义的,并且被 static 关键字修饰的类。
先看代码:

这里静态内部类 InnerClass 是定义在外部类 OuterClass 的里面,并且静态内部类是通过 static 关键字修饰的。
1.实例化静态内部类:
上面我们定义了一个静态内部类,那么应该怎么实例化一个静态内部类对象?
像这样:

在右边的 Test 方法中,通过:
外部类类名 . 内部类类名 变量 = new 外部类类名 . 内部类类名()
来实例化静态内部类对象。
2.静态内部类访问外部类成员变量:
看下面代码:

可以看到,外部类成员变量 data3 可以直接访问,因为外部类成员变量 data3 是静态成员变量,访问它不依赖对象。
但是,外部类成员变量 data1 和 data2 访问不了,因为他们是非静态成员变量,需要依赖对象。所以要想访问他们两个,应该怎么办?
这样:

我们实例化 一个外部类对象,再通过外部类对象的引用就可以访问了。
二.实例内部类:
1.实例内部类写法:

内部类 InnerClass 不加 static 修饰的 内部类 就是 实例内部类。
1.实例化实例内部类:
像这样:

看右边的代码 ,因为 InnerClass 他是实例内部类,实例的都是依赖对象的,所以要先实例化外部类,再通过外部类对象引用来实例化 实例内部类。
还有另一种方法来实例化 实例部类:

看右边代码,这种是通过 利用匿名外部类对象来实例化 实例内部类。
2.外部类成员变量 与 实例内部类成员变量 同名情况:
看代码:

通过Test测试打印结果:

这里可以通过 外部类类名 . this .同名成员变量 来访问同名的外部类成员变量。
三.匿名内部类:
匿名内部类的定义使用:
第一种:

此时,new OuterClass就是匿名内部类,也可以认为这个没名字的类 继承了OuterClass类,我们就要重写OuterClass 类里的 test 方法,想要调用test方法就可以通过 在花括号--- > } . 重写方法名 ;
第二种:

此时,new OuterClass 本身还是匿名内部类,我们只是通过给 他一个引用来接收他这个匿名内部类。然后通过 引用 来调用 重写的test方法。
四.局部内部类(几乎不使用):

局部内部类是定义在 方法里面 的,局部内部类做作用域只能 在方法里面,所以只能在方法里面 实例化,访问成员变量.......; 出了方法外面就不能使用了。
并且,局部内部类不能被 public ,static 修饰符修饰。

被折叠的 条评论
为什么被折叠?



