阅读量:79
在 Java 中,内部类(Inner Class)是定义在另一个类的内部的类。根据内部类与外部类的关系,可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。下面分别介绍这四种类型的定义方法。
- 成员内部类(Member Inner Class): 成员内部类是定义在外部类的成员位置上的类,它可以访问外部类的所有成员(包括私有成员)。成员内部类的定义与普通类相同,只是在类名前面加上外部类的类名即可。例如:
public class OuterClass {
private int outerData = 0;
public class InnerClass {
public void accessOuterData() {
System.out.println("outerData = " + outerData);
}
}
}
- 局部内部类(Local Inner Class): 局部内部类是定义在方法或代码块中的类。局部内部类只能访问所在方法或代码块中的final变量(包括实际上被声明为final的变量,以及实际上没有被修改其值的变量)。局部内部类的定义与普通类相同,只是在类名前面加上外部类的类名即可。例如:
public class OuterClass {
public void createLocalInnerClass() {
final int localData = 0;
class LocalInnerClass {
public void accessLocalData() {
System.out.println("localData = " + localData);
}
}
LocalInnerClass localInner = new LocalInnerClass();
localInner.accessLocalData();
}
}
- 匿名内部类(Anonymous Inner Class):
匿名内部类是没有名字的内部类,通常用于创建一次性使用的对象,例如实现接口或继承其他类。匿名内部类的定义与普通类相似,只是在类名位置使用关键字
new,并紧接着给出类的构造函数和实现代码。例如:
public class OuterClass {
public void createAnonymousInnerClass() {
new Object() {
public void printMessage() {
System.out.println("This is an anonymous inner class.");
}
}.printMessage();
}
}
- 静态内部类(Static Inner Class):
静态内部类是定义在外部类的静态成员位置上的类。静态内部类不能访问外部类的非静态成员,但可以通过外部类实例访问静态成员。静态内部类的定义与普通类相同,只是在类名前面加上
static关键字。例如:
public class OuterClass {
private static int outerStaticData = 0;
public static class StaticInnerClass {
public void accessOuterStaticData() {
System.out.println("outerStaticData = " + outerStaticData);
}
}
}