java中把一个类定义到另外一个类的内部,称为内部类。
内部类常见分为四种:静态内部类、成员内部类、局部内部类、匿名内部类。
代码展示:
public class OuterClass {
//静态内部类
static class InnerClass1{}
//成员内部类
class InnerClass2{}
public void func(){
//局部内部类
class InnerClass3{}
}
}
public class MyFrame extends Frame {
public MyFrame(){
addWindowListener(new WindowAdapter() { //匿名内部类
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
}
});
}
}
- 静态内部类
被static关键字修饰的内部类。不依赖于外部类实例而被实例化。只能访问外部类的静态变量、静态方法。 - 成员内部类
静态内部类去掉static,则为成员内部类。可以自由访问外部类中的变量、方法而不管是不是静态的。另外,非静态内部类不能有静态的成员。
局部内部类实例化需要先实例化外部类:
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass2 innerClass2 =
outerClass.new InnerClass2();
- 局部内部类
定义在一个代码块中的内部类。作用范围是整个代码块。不能被public、protected、private以及static修饰,只能访问方法中定义为final类型的局部变量。 - 匿名内部类
一种没有类名的内部类。不能使用关键字class、extends、implements,没有构造函数,必须继承其他类或者实现其他接口。
- 匿名内部类没有构造器
- 不能定义静态成员、方法、类
- 不能是public、protected、private、static
- 只能创建匿名内部类的一个实例
- 匿名内部类为局部内部类,因此局部内部类的限制都对其有效。