内部类是一种特殊的类,指的是定义在一个类的内部的类。实际开发中,为了方便的使用外部类的相关属性和方法,这时候我们通常会定义一个内部类。
一般情况下,我们把类定义成独立的单元,有些情况下,我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。
内部类可以使用 public、private、default、protected 以及 static 修饰。而外部顶级类只能使用 public 和 default 修饰。
注意
内部类只是一个编译时的概念,一旦我们编译成功,就会成为完全不同的两个类。对于一个名为 Outer 的外部类和其内部定义的名为 Inner 的内部类。编译完成后会出现两个类的字节码文件。所以内部类是相对独立的一种存在,其成员变量、方法名可以和外部类相同。
示例
上面代码编译后产生两个字节码文件
非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)
我这人不喜欢一大堆理论阐述,直接来段代码玩玩就明白了。Look!
示例
new Inner()
。
2.外部类以外的地方使用非静态内部类:Outer.Inner varname=new Outer().new Inner()
。static class className{
...
}
要点
1. 静态内部类可以访问外部类的静态成员,不能访问外部类的普通成员。
2. 静态内部类看做外部类的一个静态成员。
适合那种只需要使用一次的类。比如:键盘监听操作等等。在安卓开发、awt、swing 开发中较为常见。
new 父类构造器(实参类表)\实现接口(){
//匿名内部类类体
}
注意
匿名内部类没有访问修饰符。
匿名内部类没有构造方法,因为它连名字都没有,何来构造方法呢。
定义在方法内部的,作用域只限于本方法,称为局部内部类。
局部内部类的使用主要是用来解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到时候又不希望这个类时公共可用的,所以就产生了局部内部类。局部内部类和成员内部类一样被编译,只是它的作用于发生了改变,它只能在该方法中被使用,出了该方法就会失效。
局部内部类在实际开发应用中很少。
over!